tomcat下关闭应用,线程未终止
tomcat关闭时,有时候因为各种原因会报线程未关闭的错误。像这样
The web application [/Test] appears to have started a thread named [your Thread] but has failed to stop it. This is very likely to create a memory leak.
我们可以
1.新建一个类实现ServletContextListener,然后重写 contextDestroyed(ServletContextEvent arg0)方法,在它里面关闭后台进程。
2.也可以继承ContextLoaderListener,ContextLoaderListener实现了ServletContextLoader。
3.注意web.xml中配置你自己的这个listener哦。
public void contextDestroyed(ServletContextEvent sce) {
destroyThreads();
}
private void destroyThreads(){
final Set<Thread> threads = Thread.getAllStackTraces().keySet();
for (Thread thread : threads) {
if(thread.getName().equals("your thread identifier")){
synchronized (this) {
try {
thread.stop();
return;
} catch (Exception e) {
}
}
}
}
