现象
项目停止的时候,控制台打印这个错误,提示有些线程没有停止,可能会导致内存泄漏。
项目部署在tomcat中,当项目停止的时候由于自己启动的线程池、JDBC链接等线程没有关闭,导致tomcat抛出这个警告。
解决办法
增加一个监听器,在项目结束事件中关闭自己启动的链接和线程池等。
@WebListener
public class DomesticStatisticServiceExecutorShutdown implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("系统停止");
recLoop = false;
executorService.shutdown();
try {
if (!executorService.awaitTermination(60, TimeUnit.SECONDS)) {
executorService.shutdownNow();
}
} catch (InterruptedException e) {
executorService.shutdownNow();
}
}
}
给出的实例中是线程池的关闭方法。首先调用shutdown(),试图关闭线程。等待一段时间后,还是没有关闭则强制关闭线程池。
项目中使用了其他的链接信息、接口调用等代码。可以自行查阅相关功能的close方法,写到这个方法中即可。
6394

被折叠的 条评论
为什么被折叠?



