Java では、予期しない割り込みを正常に処理することが、堅牢なアプリケーションにとって重要です。シャットダウン フックは、JVM が終了する前に必要なクリーンアップ タスクを実行するメカニズムを提供します。
ファイルに数値のバッチを書き込む、次の単純化されたアプリケーションを考えてみましょう。
<code class="java">public class GracefulShutdownTest1 { // ... public void run() { // ... for (int i = 0; i < N; ++i) writeBatch(pw, i); // ... } }</code>
中断の場合に部分的なバッチが書き込まれないようにするために、正常なシャットダウン メカニズムを統合する必要があります。
シャットダウン フックはスレッドですJVM が終了する前に実行されます。シャットダウン フックを登録するには:
この場合、シャットダウン フックを追加して現在のバッチを確実に完了できます。
<code class="java">// ... private static volatile boolean keepRunning = true; // ... // In run(): for (int i = 0; i < N && keepRunning; ++i) writeBatch(pw, i); // In main(): Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { keepRunning = false; mainThread.join(); } });</code>
JVM はシャットダウンを開始し、このフックを実行します。 keepRunning を false に設定して、アプリケーションにバッチの書き込みを停止するよう通知し、メイン スレッド (run() を実行している) が終了するのを待ちます。これにより、アプリケーションが終了する前に現在のバッチが確実に完了します。
シャットダウン フックと共有フラグを統合することで、JVM が実行される前に必要なタスクを完了する正常なシャットダウン メカニズムを実装できます。終了します。このアプローチにより、アプリケーションのデータの整合性が保証され、予期しないクラッシュが防止されます。
以上がシャットダウンフックはどのようにして Java アプリケーションの正常な終了を保証できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。