因爲它在JavadocExecutors.newFixedThreadPool上吊線
說,在池中的線程將存在 直到它被明確
ExecutorService#shutdown()
shutdowned如果我在Tomcat Web應用程序。在啓動時它創建一個固定的線程池。我也調查過
public static void main(String ... strings) {
ExecutorService s = Executors.newFixedThreadPool(2);
s.submit(new Runnable() {
public void run() {
System.out.println("zzz");
}
});
}
上述示例中的線程在我將它們提交給ExecutorService之前不存在。當main
方法結束時,我在任務管理器(win 7 os)的進程列表中看到一個javaw.exe
。所以我假設運行該示例的jvm的實例仍然存在。當我添加s.shutdown()
- 進程列表中沒有任何java進程。
問題1:當tomcat由於某些錯誤而突然停止時,Java進程是否會掛在內存中(如果以前某些任務被提交到上述線程池中);
問題2:如果答案previouse問題是肯定的,是否有一些方法來使池中的線程是守護進程或許是有一些方法來處理這樣的tomcat/MYAPP停止調用ExecutorService#shutdown()
注如果你使用番石榴(如果你不是,爲什麼不呢?)例如,可以從MoreExecutors.daemonThreadFactory()獲得ThreadFactory。 –
還注意到,如果您要在Web應用程序中創建Executor或ThreadPool,最好設置一個ContextListener來關閉執行程序/池,以便您可以讓任務有機會徹底關閉而不是在工作中突然終止。 –
好點@matt。我已經添加了一些關於該信息的鏈接。 – Gray