如何在
之后关闭使用ExecutorService创建的所有线程executor.awaitTermination(1, TimeUnit.DAYS);
结束了吗?
这是线程可以工作的最长时间,如果在某些情况下,它们中的任何一个都没有完成当前任务,请将其关闭并重新开始。
答案 0 :(得分:2)
如果awaitTermination
返回true,则所有线程都已关闭。
如果awaitTermination
返回false,那么一些线程显然没有响应中断*,除了退出java进程之外,你可以做的并不多......
*如果线程运行的任务是您的,请确保它们通过快速退出来响应中断,awaitTermination
将立即返回。
答案 1 :(得分:2)
没有简单的方法可以做到这一点。您可以使用将创建守护程序线程的ThreadFactory,然后在主线程中运行awaitTermination
,然后运行shutdownNow
。这将(希望)关闭整个JVM,并且在给定情况下几乎没有什么比这更好。执行System.exit()
是一个更加激烈的措施。
请注意,中断甚至停止线程并不能保证它们实际上会终止。
答案 2 :(得分:0)
您可以调用System.exit(1)来停止应用程序。如果你不想退出那么你应该设计你的任务,以便它们正确地对Thread.interrupt作出反应,没有别的办法。