Java 由于守护进程线程,Tomcat未完全关闭

Java 由于守护进程线程,Tomcat未完全关闭,java,tomcat6,Java,Tomcat6,我们运行我们的web应用程序,然后启动一些线程进行后台工作,还有Quartz。 当我试图关闭tomcat(在linux上使用shell脚本)时,我总是收到错误消息,说由于守护进程线程和石英线程,关闭tomcat失败。 我们尝试了不同的方法来关闭线程(exit out of run方法),但是我们依靠类的几个静态变量来完成这项工作,当我的关闭侦听器得到回调时,这些静态变量将变为null 对于这种情况,是否有一种标准的方法来关闭tomcat?答案不是这样,但很高兴知道: JVM不为守护进程线程提供任

我们运行我们的web应用程序,然后启动一些线程进行后台工作,还有Quartz。 当我试图关闭tomcat(在linux上使用shell脚本)时,我总是收到错误消息,说由于守护进程线程和石英线程,关闭tomcat失败。 我们尝试了不同的方法来关闭线程(exit out of run方法),但是我们依靠类的几个静态变量来完成这项工作,当我的关闭侦听器得到回调时,这些静态变量将变为null


对于这种情况,是否有一种标准的方法来关闭tomcat?

答案不是这样,但很高兴知道:


JVM不为守护进程线程提供任何关闭保证。他们只是停下来。最后没有,没有垃圾收集,什么都没有。

现在要找到可能的答案(如果使用Spring),请查看。如果您使用Spring,您可以在Spring石英配置中添加一个显式的
destroy
子句,以便它可以干净地关闭


否则,Servlet侦听器(我认为是ServletContext侦听器,但已经有一段时间了…)可以检测到关闭,您可以手动关闭Quartz。

最终我能够获得它。问题不在于tomcat,而在于我们的应用程序初始化的方式。根据servlet规范,我们将应用程序的初始化(启动这些线程的类)移动到一个侦听器中,servlet最后加载,然后首先卸载,其中侦听器首先加载,最后从服务器卸载。 extraneon提供的Spring链接非常有用