javadoc で述べたように
プール内のスレッドは、明示的にシャットダウンされるまで存在します。
ExecutorService#shutdown()
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) のプロセスのリストに a が表示さjavaw.exe
れます。したがって、その例を実行する jvm のインスタンスがまだ存在すると仮定します。追加するs.shutdown()
と、プロセスリストにJavaプロセスがありません。
質問 1 : tomcat が何らかのエラーのために突然停止した場合、Java プロセスはメモリ内でハングします (以前にいくつかのタスクが上記のスレッド プールにサブミットされていた場合)。
質問 2 : 前の質問に対する答えが「はい」の場合、プール内のスレッドをデーモンにする方法がいくつかありますか、またはそのような tomcat/myapp 停止を処理して呼び出す方法がいくつかありますか?ExecutorService#shutdown()