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