ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

終了しないプロセス

以下が再現用のプログラム。

public class test {
	public static void main(String[] args) throws Exception {
		new Thread(new Runnable() {
			public void run() {
				while(true) {
					try {
						System.out.println("Hello!");
						Thread.sleep(1000);
					} catch(InterruptedException e) {
						// ignore
					}
				}
			}
		}).start();

		Thread.sleep(5000);
		//System.exit(0);
		throw new NoClassDefFoundError();
	}
}

jarのリリースがミスってて、NoClassDefFoundErrorが起きたっていうのが、そもそもの始まりだったりするわけですが、、
System.exitだと、スレッド残っててもプロセス終了しちゃうんですね。


OutOfMemoryErrorとか、なにがしかのErrorが起きたときは、このソースだと延々終わらないプロセスになってしまうわけですが、どうしたものか。
一番安直なのは、Throwableをcatchして、System.exitすることなのだけど、さすがに安直すぎるか。
起こしたスレッド側から、メインスレッドの状態を取得して、どうにかするのが筋なのかも。