主线程完成时正常关闭ExecutorService

Aks*_*ert 4 java executorservice threadpool

在实用程序库中,我正在创建ExecutorService

ExecutorService es = Executors.newSingleThreadExecutor();
Run Code Online (Sandbox Code Playgroud)

然后主线程将一些任务发布到此ExecutorService.当主线程完成时,我想关闭ExecutorService以允许应用程序退出.

问题是我只能更改实用程序库中的代码.我考虑过的一个选择是使用守护进程线程.但是,在发布到服务的任务完成之前,它会突然关闭.

Bal*_*usC 5

用于Runtime#addShutdownHook()向当前运行时添加关闭挂钩.

例如

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() {
        es.shutdown();
        try {
            es.awaitTermination(5, TimeUnit.SECONDS);
        } catch (InterruptedException e) {
            logger.info("during await",e);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

在实用程序类的构造/初始化时执行此操作.