39public final class LoginExecutorService
implements Closeable {
41 private static final Logger logger = LoggerFactory.getLogger(LoginExecutorService.class);
43 private static final long TERMINATION_TIMEOUT = 60;
44 private static final TimeUnit TERMINATION_TIMEOUT_UNIT = TimeUnit.SECONDS;
46 private final ExecutorService executorService;
48 public LoginExecutorService(
final int threads) {
49 this.executorService = Executors.newFixedThreadPool(threads);
53 public void close()
throws IOException {
54 final ExecutorService executorService = this.executorService;
55 executorService.shutdown();
58 if (!executorService.awaitTermination(TERMINATION_TIMEOUT, TERMINATION_TIMEOUT_UNIT)) {
59 executorService.shutdownNow();
61 if (!executorService.awaitTermination(TERMINATION_TIMEOUT, TERMINATION_TIMEOUT_UNIT)) {
62 logger.warn(
"Pool did not terminate in {} {}", TERMINATION_TIMEOUT, TERMINATION_TIMEOUT_UNIT);
65 }
catch (
final InterruptedException ex) {
67 executorService.shutdownNow();
69 Thread.currentThread().interrupt();
75 executorService.execute(() -> loginSession.handleUserLoginDetails(loginDetailsPacket));