正如它在javadoc中所说
池中的线程将一直存在,直到它被显式关闭
ExecutorService#shutdown()
如果我在 Tomcat 上有一个 Web 应用程序。在启动时它会创建一个固定的线程池。我也调查过
public static void main(String ... strings) {
ExecutorService s = Executors.newFixedThreadPool(2);
s.submit(new Runnable() {
public void run() {
System.out.println("zzz");
}
});
}
上面示例中的线程在我将它们提交给 ExecutorService 之前不存在。当main
方法结束时,我javaw.exe
在任务管理器(win 7 os)的进程列表中看到一个。所以我假设运行该示例的 jvm 实例仍然存在。当我添加时s.shutdown()
- 进程列表中没有任何 java 进程。
问题1:当tomcat由于一些错误突然停止时,java进程是否会在内存中挂起(如果之前有一些任务被提交到上面提到的线程池中);
问题 2:如果对上一个问题的回答是肯定的,是否有一些方法可以使池中的线程成为守护进程,或者是否有一些方法可以处理此类 tomcat/myapp 停止调用ExecutorService#shutdown()