java - ExecutorService 终止,但 JVM 没有

标签 java multithreading executorservice

我向 Executors.newFixedThreadPool(3) 提交了一些任务,它们都运行并成功完成。然后我打电话

executorService.shutdown();
executorService.awaitTermination(2000, TimeUnit.MILLISECONDS);

检查通过

executorService.isShutdown()
executorService.isTerminated()

并获得两次真实返回。主线程退出,但 JVM 保持 Activity 状态。没有 AWT 线程或类似线程,我只能看到 3 个池线程,DestroyJavaVMcom.google.inject.internal.util.$Finalizer

如果 Finalizer 不是守护线程,它可能是主要嫌疑人。我暂停了两个线程来获取这张图片

godot

实际上,由于 isTerminated == true,我希望池线程早就消失了。知道他们都在等谁吗?

最佳答案

从您的调试图像看来,您的服务并不孤单,因为它名为 pool-2。因此,您可能还有另一个 ExecutorService 仍在作为 pool-1 运行,以防止 JVM 退出。

关于java - ExecutorService 终止,但 JVM 没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25946103/

相关文章:

java - 使用数组来改进递归二项式分布算法的执行时间?

java - ThreadPoolExecutorService 顺序执行线程而不是并发执行线程?

java - 一个 Web 应用程序中特定的多个 SAXParserFactory 实现

java - java中是否有等效的asm nop?

java - 我应该使用哪个 Java 集合来实现线程安全缓存?

linux - save_stack_trace_tsk 和 struct stack_trace 在 Linux 5.2+ 中不再可用

c# - 为什么 Log4Net 不在我的单独线程中记录日志语句?

java - 如何在我的线程中断后立即中断 RestTemplate 调用?

java - 如何在java中取消一个ExecutorService

java - 使用 Java 8 DateTimeFormatter 和西类牙月份名称进行解析