我向Executors.newFixedThreadPool(3)
提交了一些任务,它们都成功运行并完成。然后我打电话给
executorService.shutdown();
executorService.awaitTermination(2000, TimeUnit.MILLISECONDS);
通过
检查executorService.isShutdown()
executorService.isTerminated()
然后再回来两次。主线程退出,但JVM保持活动状态。没有AWT线程或类似的,我只能看到3个池线程,DestroyJavaVM
和com.google.inject.internal.util.$Finalizer
。
如果不是一个守护线程,终结者可能是主要的嫌疑人。我暂停了两个线程来获取此图像
实际上,由于isTerminated == true
,我希望池线程早已消失。知道谁都在等他们?
答案 0 :(得分:1)
从您的调试图像看来,您的服务并不是唯一的,因为它的名称为pool-2
。因此,您可能还有另一个ExecutorService
仍在运行pool-1
,阻止JVM退出。
答案 1 :(得分:0)
我猜你必须在awaitTermination(..)之后调用executorService.shutdownNow()来正确关闭服务。
此外,您应该调用System.exit(..),它最终将终止您的JVM。