目次
Java シャットダウン フック: 実用的な実装
シャットダウン フックについて
実際にシャットダウン フックを使用する
ホームページ Java &#&チュートリアル Java シャットダウン フックをどのように使用して、アプリケーションを正常にシャットダウンし、ファイル内のバッチ処理を処理できるでしょうか?

Java シャットダウン フックをどのように使用して、アプリケーションを正常にシャットダウンし、ファイル内のバッチ処理を処理できるでしょうか?

Nov 04, 2024 pm 10:14 PM

How can Java Shutdown Hooks be used to ensure a graceful application shutdown and handle batch processing in a file?

Java シャットダウン フック: 実用的な実装

ソフトウェア開発において、正常なシャットダウンとは、中断を最小限に抑えてアプリケーションを終了する方法を指します。シャットダウン フックは、アプリケーションがクリーンアップ タスクを実行し、正常にシャットダウンできるようにする Java メカニズムです。

シャットダウン フックについて

シャットダウン フックは、Java 仮想マシン (JVM) に登録される実行可能なオブジェクトです。 。 JVM がシャットダウン シーケンスに入ると、登録されているすべてのフックが不特定の順序で実行されます。フックを使用すると、ファイル ハンドルを閉じる、データベース接続を解放する、その他の必要なシャットダウン操作を実行するなどのタスクを実行できます。

実際にシャットダウン フックを使用する

シャットダウン フックを効果的に使用するには、次のことが重要です。それらがアプリケーションのライフサイクルとどのように相互作用するかを理解します。シャットダウン フックは通常、アプリケーションの初期化中に登録されます。アプリケーションがシャットダウンするとき、JVM は別のスレッドですべてのフックの実行をトリガーします。

これは、ファイル内のバッチ処理を適切に処理するシャットダウン フックを実装する方法を示す、提供されたコードの改訂版です。 :

<code class="java">public class GracefulShutdownTest2 {
    final private int N;
    final private File f;
    private volatile boolean keepRunning = true;

    public GracefulShutdownTest2(File f, int N) {
        this.f = f;
        this.N = N;
        registerShutdownHook();
    }

    public void run() {
        PrintWriter pw = null;
        try {
            FileOutputStream fos = new FileOutputStream(this.f);
            pw = new PrintWriter(fos);
            for (int i = 0; i < N && keepRunning; ++i) {
                writeBatch(pw, i);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            pw.close();
        }
    }

    private void writeBatch(PrintWriter pw, int i) {
        for (int j = 0; j < 100; ++j) {
            int k = i * 100 + j;
            pw.write(Integer.toString(k));
            if ((j + 1) % 10 == 0) {
                pw.write('\n');
            } else {
                pw.write(' ');
            }
        }
    }

    private void registerShutdownHook() {
        Runtime.getRuntime().addShutdownHook(new Thread() {
            @Override
            public void run() {
                keepRunning = false;
                try {
                    Thread.currentThread().join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public static void main(String[] args) {
        if (args.length < 2) {
            System.out.println("args = [file] [N] "
                    + "where file = output filename, N=batch count");
        } else {
            new GracefulShutdownTest2(
                    new File(args[0]),
                    Integer.parseInt(args[1])
            ).run();
        }
    }
}</code>
ログイン後にコピー

このコードでは、アプリケーションがバッチの処理を継続する必要があることを示すために keepRunning フラグが使用されています。シャットダウン フックはこのフラグを false に設定し、メイン スレッドが現在のバッチの処理を完了するのを待ってからアプリケーションを終了します。

シャットダウン フックを利用することで、開発者は、アプリケーションが停止している場合でも、重要なタスクが正常に完了することを保証できます。途中で終了されます。これにより、データの整合性が維持され、プログラムの突然の終了が防止され、ユーザー エクスペリエンスが向上します。

以上がJava シャットダウン フックをどのように使用して、アプリケーションを正常にシャットダウンし、ファイル内のバッチ処理を処理できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)