我開發了一個在Tomcat中運行的多線程Web應用程序。 但我不能用線程是否有特殊的設計要被Tomcat正常關閉?
shutdown.bat
的Tomcat沒有正常停止。在調試器中,我看到線程在shutdown命令後繼續運行。我是否必須修復我的應用程序代碼以滿足特殊要求? 謝謝。
我開發了一個在Tomcat中運行的多線程Web應用程序。 但我不能用線程是否有特殊的設計要被Tomcat正常關閉?
shutdown.bat
的Tomcat沒有正常停止。在調試器中,我看到線程在shutdown命令後繼續運行。我是否必須修復我的應用程序代碼以滿足特殊要求? 謝謝。
...並將其他響應與Java Servlet環境的工作聯繫起來;
如果您沒有將線程聲明爲守護程序線程,那麼將服務器關閉通知給線程的方法是實現ServletContextListener
並將其配置爲您的web應用程序(web.xml)。當Tomcat關閉時,它將首先關閉每個應用程序,這將導致調用監聽器的方法contextDestroyed()
- 這是您可以向自己的線程表明他們應該完成其工作的位置。
您需要取消線程,最好通過調用它們interrupt
並確保它們都寫在這樣一種方式,他們響應中斷 - 這意味着,檢查自己的中斷標誌,並智能地響應InterruptedExceptions (不只是吃它們並繼續)。
上述建議假設您不希望自己的線程立即放棄正在執行的操作。如果你確定,那麼讓他們守護進程。
我使用創建自己的線程的第三部分庫的問題。與這些線程是問題。 – user710818 2011-12-30 14:49:18
@ user710818:是的,這是一個不好的問題。我希望圖書館能夠提供一些方法讓你告訴他們做一個正常的關機。 – 2011-12-30 14:58:48
無論如何找出造成這個問題的線程,將對我有所幫助,因爲我也遇到了這個問題。 – Azim 2016-07-22 08:05:41
您可以使用kill -3,jstack或tomcat經常轉儲catalina.out中的堆棧跟蹤。 – ticktock 2016-08-03 00:37:44