[英]Shutdown Executor thread after awaitConfimation
如何在关闭后关闭使用ExecutorService创建的所有线程
executor.awaitTermination(1, TimeUnit.DAYS);
完成了吗?
那是线程可以工作的最长时间,如果在某些情况下它们中的任何一个没有完成当前任务,则将其关闭并重新启动。
如果awaitTermination
返回true,则所有线程都已关闭。
如果awaitTermination
返回false,那么某些线程显然不会响应中断*,并且除了退出Java进程外,您无能为力。
*如果线程运行的任务是您的,请确保它们通过快速退出对中断做出响应,并且awaitTermination
将立即返回。
没有简单的方法可以做到这一点。 您可以使用ThreadFactory来创建守护进程线程,然后在主线程中运行awaitTermination
,然后运行shutdownNow
。 (希望)关闭整个JVM,在给定的情况下,没有什么比这更好的了。 执行System.exit()
是一个更为严格的措施。
请注意,中断甚至停止线程并不能保证它们会真正终止。
您可以调用System.exit(1)停止应用程序。 如果您不想退出,则应该设计任务,以使它们对Thread.interrupt做出正确的反应,没有其他方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.