Executors.newCachedThreadPool()使用
Executors.defaultThreadFactory()它的
ThreadFactory。
defaultThreadFactory的javadocs说“每个新线程都被创建
为非守护
线程”(添加了重点)。因此,为所创建的线程
newCachedThreadPool是非守护程序。这意味着它们将阻止JVM自然退出(通过“自然”,我是说您仍然可以调用
System.exit(1)或杀死该程序以使JVM停止运行)。
应用程序完全结束的原因是,在
newCachedThreadPool超时时间内创建的每个线程都会在一段时间不活动后自行关闭。当它们中的最后一个关闭时,如果您的应用程序中没有剩余的非守护线程,则它将退出。
您可以(并且应该)
ExecutorService通过
shutdown或手动关闭下拉菜单
shutdownNow。
另请参阅JavaDoc for
Thread,它讨论守护程序。



