Ctrl-Cで強制終了するマルチスレッドのJavaコンソールアプリケーションを作成しています。この状況で、単一のスレッドをカプセル化するクラスがある場合、カプセル化するクラスのfinalizeメソッドで子スレッドをシャットダウンすることをお勧めしますか?
元のアプリをCtrl-Cして、すべてのスレッドが適切にシャットダウンされない場合、元のアプリケーションのアーティファクトを実行したままにすることは可能ですか?
擬似コード:
public class ParentClass {
Thread childThread = new Thread(new ExampleRunnable());
@Override protected void finalize() throws Throwable {
childThread.shutdown();
}
}
public class ExampleRunnable implements Runnable {
private volatile boolean alive = false;
@Override
public void run() {
alive = true;
while(alive) {
//do some work
}
}
public void shutdown() {
alive = false;
}
}