Java では、シャットダウン フックは、アプリケーションが終了時にクリーンアップ タスクを実行する方法を提供します。これは、予期しない中断が発生した場合にプログラムを確実に正常にシャットダウンするのに役立ちます。
バッチでファイルに数値を書き込む次のアプリケーションについて考えてみましょう。
<code class="java">import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintWriter; public class GracefulShutdownTest1 { private final File f; private final int N; public GracefulShutdownTest1(File f, int N) { this.f = f; this.N = N; } public void run() { try (PrintWriter pw = new PrintWriter(new FileOutputStream(f))) { for (int i = 0; i < N; ++i) { writeBatch(pw, i); } } catch (FileNotFoundException e) { e.printStackTrace(); } } private void writeBatch(PrintWriter pw, int i) { for (int j = 0; j < 100; ++j) { pw.write(Integer.toString(i * 100 + j)); if ((j + 1) % 10 == 0) { pw.write('\n'); } else { pw.write(' '); } } } 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 GracefulShutdownTest1(new File(args[0]), Integer.parseInt(args[1])).run(); } } }</code>
このアプリケーションにシャットダウン フックを統合するには、次の手順に従います。
<code class="java">private static volatile boolean keepRunning = true; // ... public void run() { try (PrintWriter pw = new PrintWriter(new FileOutputStream(f))) { for (int i = 0; i < N && keepRunning; ++i) { writeBatch(pw, i); } } catch (FileNotFoundException e) { e.printStackTrace(); } } // ... public static void main(String[] args) { final Thread mainThread = Thread.currentThread(); Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { keepRunning = false; mainThread.join(); } }); new GracefulShutdownTest1(new File(args[0]), Integer.parseInt(args[1])).run(); }</code>
シャットダウン フックを実装することで、より復元力の高い終了する前に必要なクリーンアップ タスクを実行するアプリケーション。
以上が特にファイル操作を扱う場合、Java のシャットダウン フックを使用してアプリケーションを正常に終了するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。