从创建ExecutorService的不同线程调用ExecutorService.shutdown()和awaitTermination()是否安全?

时间:2014-08-31 00:00:54

标签: java multithreading concurrency executorservice

我在线程A上创建ExecutorService,然后线程B在ExecutorService上调用shutdown()awaitTermination()

假设在创建线程B之前已经提交了所有任务,并且没有提交新任务,是否有任何危险?

我猜它没关系,但问问题永远不会伤害。

1 个答案:

答案 0 :(得分:0)

正如您所猜测的那样,从Thread B调用ExecutorService上的ExecutorService shutdown()和awaitTermination(..)是绝对正确的。

事实上,在ExecutorService的通常用法中,一个线程负责将所有线程任务添加到executorservice,然后同一线程启动正常shutdown()然后awaitTermination(..)。因此,在您的情况下,您只是创建ThreadB来执行关机任务。

理想情况下,最好不要将ThreadB提交给它会尝试关闭的同一个ExecutorService(),我相信你会考虑这个。