java - 退出应用程序时如何关闭所有Executor?

标签 java concurrency

根据 Brian Goetz 的 Java Concurrency in Practice JVM 在所有(非守护进程)线程终止之前无法退出,因此未能关闭 Executor 可能会阻止 JVM 退出。

即如果周围有 Executors,System.exit(0) 不一定会按预期工作。似乎有必要放一些

public void stop() { exec.shutdown() }

所有包含执行器的类的方法,然后在应用程序即将终止时调用它们。这是唯一的方法,还是有某种捷径可以关闭所有执行程序?

最佳答案

没有捷径可以完成所有这些,不。此外,您可能应该调用 shutdownNow() 而不是 shutdown(),否则您可能需要等待一段时间。

我想,您可以做的是,当您创建执行器时,将其注册在一个中心位置。然后,在关闭时,只需对该中心对象调用 shutdown(),这又可以终止每个已注册的执行程序。

如果您使用 Spring,那么您可以利用它的工厂 bean 为您创建和管理执行器。这包括在应用程序退出时优雅地关闭它们,从而避免您必须自己管理它们。

关于java - 退出应用程序时如何关闭所有Executor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1211657/

相关文章:

java - 将 Tomcat 连接到 Activemq 需要哪些最少的 jars 文件集?

java - 为什么对负数进行位移位不起作用?

go - 如何等待一组goroutines?

concurrency - 真实并发和表观并发的确切区别是什么?

python - 如何在异步中并发运行任务?

java - 如何检查执行器何时完成运行特定的 Runnable

java - 如果一个线程试图获取它已经持有的锁会发生什么?

java - 通过单选按钮将男性或女性设置为整数

java - 我的代码是否正确计算数据集的熵/条件熵?

支持 Windows 服务的 Java 安装程序