mak*_*aks 4 java multithreading tomcat
正如它在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");
}
});
}
Run Code Online (Sandbox Code Playgroud)
在我将它们提交给ExecutorService之前,上述示例中的线程不存在.当main方法结束时,我javaw.exe在任务管理器的进程列表中看到一个(win 7 os).所以我假设运行该示例的jvm实例仍然存在.当我添加时s.shutdown()- 进程列表中没有任何java进程.
问题1:当tomcat由于某些错误突然停止时,java进程会挂起内存(如果以前有些任务被提交到上面提到的线程池);
问题2:如果上一个问题的答案是肯定的,是否有一些方法可以使池中的线程成为deamon,或者有一些方法可以处理这样的tomcat/myapp停止调用ExecutorService#shutdown()
Gra*_*ray 10
问题1:当tomcat由于某些错误突然停止时,java进程会挂起内存(如果以前有些任务被提交到上面提到的线程池);
如果它没有关闭ExecutorService然后是,它将挂起.
问题2:如果上一个问题的答案是肯定的,是否有一些方法可以使游泳池中的线程成为deamon ...
就在这里.您可以提供线程工厂.
ExecutorService threadPool = newFixedThreadPool(numThreads,
new ThreadFactory() {
public Thread newThread(Runnable runnable) {
Thread thread = Executors.defaultThreadFactory().newThread(runnable);
thread.setDaemon(true);
return thread;
}
});
Run Code Online (Sandbox Code Playgroud)
编辑:
正如@matt b所提到的,另一种机制是在Tomcat中定义一个关闭钩子/监听器:
| 归档时间: |
|
| 查看次数: |
3131 次 |
| 最近记录: |