tomcat在关闭之前是否等待应用程序线程完成?

时间:2018-03-07 06:09:15

标签: tomcat

当我们使用shutdown.sh脚本关闭tomcat时,是否等待应用程序线程完成或者是否将它们终止并关闭tomcat?

2 个答案:

答案 0 :(得分:0)

Tomcat会尝试终止应用程序线程,但如果失败,则会出现如下所示的错误消息:

  

严重:Web应用程序似乎已启动一个主题   命名[例如。 ThreadExecutor_123]但未能阻止它。这是   很可能会造成内存泄漏。

之后Tomcat关闭并让应用程序仍然运行。为避免这种情况,您的线程应该实现ServletContextListener,并且在Tomcat关闭期间,您可以在contextDestroyed方法中安全地停止线程。您可以在此处详细了解ServletContextListener link

只要您的线程与IO无关,那么您可以将其设置为守护进程以避免此问题。

答案 1 :(得分:0)

Tomcat不会停止任何未启动的线程。

因此,Tomcat将关闭自己的线程池,但是如果你的应用程序启动了线程,那么在Tomcat自行关闭后它们将继续执行。

如果这些线程是"守护进程"线程,然后JVM将在main线程(如果您使用标准启动模式 - 没有嵌入等启动Tomcat的线程)停止时停止它们。

您应该始终安排让应用程序关闭自己的线程。正如@MichealDz建议的那样,最好的方法是使用ServletContextListener