根据 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/