原因一:代码逻辑问题
解决方案:
如果出现该博客描述的问题,首先查看代码是否开了线程,而忘记回收资源,其次在看看使用的框架是否使用了连接池、线程池之类的东东,有就在恰当的时候,回收。当然,每个人都觉得自己的代码,无懈可击,完全没有必要修改,所有该方法并不适用所有人。
原因二:线程堵塞,或JDBC
解决方案:
如果出现线程堵塞,tomcat日志中会很明显的抛出严重警告,遇到这种问题,而归根结底造成这种情况,说白了也就是,原因“一”的后遗症,因为你某个地方开启了线程,或者打开连接池,然而在shutdown的时候,该批处理文件,并没关闭java后台线程,造成关闭不了tomcat的现象。
基于这种BUG:假设你使用了Servlet,那么设置监听器,显得尤其重要。什么!监听是什么?请读者自行搜索。
代码如下:
使用要点:
若是你使用的JDBC驱动,并注册了驱动,那么你需要destroySpecifyThreads
若是你开了线程,而你不知道该在哪里销毁它,那么你只需在该变量MANUAL_DESTROY_THREAD_IDENTIFIERS 中COPY日志中的未关闭,或造成堵塞线程的名字就OK了。
/*
* 监听器:程序退出,关闭所有线程
*/