我是否必须在应用程序出口处手动关闭Executor?

时间:2011-04-05 19:45:52

标签: java concurrency shutdown executor resource-management

假设我的应用程序中有某个Executor executor;。只是像往常一样说setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);并让“系统”处理它,或者我必须注册一个监听器并在应用程序退出之前手动调用executor.shutdown();这样就足够了吗?

2 个答案:

答案 0 :(得分:2)

如果这是一个独立的应用程序,并且您不关心任何正在运行的线程是否退出,那么您真的不必担心它。

如果您的类在运行其他东西的VM中运行(例如像Tomcat这样的servlet容器),则需要显式关闭执行程序,否则线程可能会继续运行(Tomcat会对你大喊大叫并告诉你它有无法杀死的线程,而且你正在泄漏内存)。

答案 1 :(得分:0)

根据应用程序的不同,在创建Executor时,会向其传递一个创建守护程序线程的ThreadFactory。这些不会阻止应用程序关闭,但它们也会随机终止。