Javaプログラミング JVM終了時の処理¶
JVM終了時に処理をしたい¶
JavaVMが終了するときに、処理を行いたい場合は、ShutdownHookを使います。
JavaVMの非デーモンスレッドがすべて停止した時に、JavaVMがShutdownHookを呼び出します。典型的にはメインスレッドが停止し、他に非デーモンスレッドがないときに、ShutdownHookを登録しておくと、呼び出されます。
- 非デーモンスレッドの最後の1つが停止したとき
- OSからシグナル(TERM)を受け取ったとき(SIGTERM、SIGINT)
- ターミナル上で起動したJavaVMでCtrl+Cを押したとき、ログオフしたとき
- System.exitメソッドを内部で読んだとき
ShutdownHookの使い方¶
RuntimeインスタンスのaddShutdownHookメソッドで、ShutdownHookを登録します。addShutdownHookはスレッドを引数にとります。
var handleThread = new Thread(() -> {
System.out.println("shutdown hooked.");
});
Runtime.getRuntime().addShutdownHook(handleThread);