java.lang.Thread.setDaemon(boolean)
実行中のスレッドがすべてデーモン スレッドのみの場合、Java 仮想マシンは終了します。
まだ下のコードでは、プロセスを中断している間(OSスタイル)に「安全にシャットダウン」が発生することはなく、SIGKILLを使用していません...
ドキュメンテーションが間違っているので (?)、すべての非デーモン スレッドを追跡し、シャットダウン フックでそれらに参加する唯一の手段ですか?
public class Main {
public static void main(String... args) {
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
System.out.println("shutdown hook activated");
}
});
new Thread(new Runnable() {
public void run() {
while (true) {
try {
System.out.println("sleeping for 1000 seconds!");
Thread.sleep(1000000);
} catch (InterruptedException e) {
System.out.println("INTERRUPTED");
break;
}
}
System.out.println("SAFELY SHUTTING DOWN");
}
}).start();
}
}