我在线程A上创建ExecutorService,然后线程B在ExecutorService上调用shutdown()
和awaitTermination()
。
假设在创建线程B之前已经提交了所有任务,并且没有新任务提交,是否有危险?
我猜很好,但是问它从来没有伤害。
最佳答案
如您所料,从线程B在ExecutorService上调用ExecutorService shutdown()和awaitTermination(..)是绝对好的。
实际上,在通常使用ExecutorService的情况下,一个线程负责将所有线程任务添加到executorservice中,然后同一线程启动正常的shutdown(),然后启动awaitTermination(..)。因此,在您的情况下,您只是创建ThreadB来执行关闭任务。
理想情况下,最好不要将您的ThreadB提交到相同的ExecutorService,因为它会尝试使用shutdown(),我相信您已经考虑过。