在awaitConfimation之后关闭Executor线程

时间:2013-08-27 11:40:14

标签: java multithreading wait executorservice

如何在

之后关闭使用ExecutorService创建的所有线程
executor.awaitTermination(1, TimeUnit.DAYS);

结束了吗?

这是线程可以工作的最长时间,如果在某些情况下,它们中的任何一个都没有完成当前任务,请将其关闭并重新开始。

3 个答案:

答案 0 :(得分:2)

如果awaitTermination返回true,则所有线程都已关闭。

如果awaitTermination返回false,那么一些线程显然没有响应中断*,除了退出java进程之外,你可以做的并不多......

*如果线程运行的任务是您的,请确保它们通过快速退出来响应中断,awaitTermination将立即返回。

答案 1 :(得分:2)

没有简单的方法可以做到这一点。您可以使用将创建守护程序线程的ThreadFactory,然后在主线程中运行awaitTermination,然后运行shutdownNow。这将(希望)关闭整个JVM,并且在给定情况下几乎没有什么比这更好。执行System.exit()是一个更加激烈的措施。

请注意,中断甚至停止线程并不能保证它们实际上会终止。

答案 2 :(得分:0)

您可以调用System.exit(1)来停止应用程序。如果你不想退出那么你应该设计你的任务,以便它们正确地对Thread.interrupt作出反应,没有别的办法。