2

之后如何关闭使用 ExecutorService 创建的所有线程

executor.awaitTermination(1, TimeUnit.DAYS);

完成了吗?

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

4

3 回答 3

2

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

如果awaitTermination返回false,那么有些线程显然没有响应中断*,除了退出java进程,你能做的也不是很多……

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

于 2013-08-27T11:43:52.633 回答
2

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

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

于 2013-08-27T11:45:02.587 回答
0

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

于 2013-08-27T11:42:49.737 回答