前の質問からのフォローアップ
前の質問を読んだことがある場合、代わりのタイトルは次のようになります
:
JVM は、終了するように通知されると、シャットダウン プロセスを実行します。これにより、すべてのシャットダウン フック スレッドが開始され、終了するまで待機されます。待機時間を決定するのは OS 次第であり、それはプロセスの終了を開始するために使用される方法によって異なります。次のような簡単なテスト プログラムを使用して、これを自分で試すことができます。
public static void main ( String[] args ) throws InterruptedException {
Runtime.getRuntime ().addShutdownHook ( new Thread () {
@Override
public void run () {
System.out.println ( "Shutdown hook" );
while ( true ) { }
}
} );
while ( true ) {
System.out.println ( "Looping" );
Thread.sleep ( 10000 );
}
}
ctrl+c でプロセスにシグナルを送ると、プロセスはシャットダウン フックを開始しますが、決して終了しません。シャットダウン フックのビジー ループを削除すると、フックの終了時に終了することがわかります。
jvm はシャットダウンを実行します。猶予時間はオペレーティング システムに基づいており、これを構成する制御はありません。