我使用Executors.newFixedThreadPool
生成线程池,并希望在作业队列为空且没有线程正在工作时关闭它。我该怎么做?
答案 0 :(得分:4)
首先需要关闭池,同时让所有已提交的任务完成但不允许新任务完成。然后你可以阻塞,直到队列为空并且所有任务都已完成:
pool.shutdown();
pool.awaitTermination(1, TimeUnit.HOUR);
先前提交的任务已执行,但不会接受任何新任务
ExecutorService.awaitTermination()
:
阻止所有任务在关闭请求后完成执行