Heim >Java >javaLernprogramm >Wie kann ein Shutdown-Hook in Java verwendet werden, um eine ordnungsgemäße Beendigung einer Anwendung sicherzustellen, insbesondere bei Dateivorgängen?
In Java bieten Shutdown-Hooks eine Möglichkeit für Anwendungen, bei Beendigung Bereinigungsaufgaben durchzuführen. Dies kann nützlich sein, um sicherzustellen, dass das Programm im Falle einer unerwarteten Unterbrechung ordnungsgemäß heruntergefahren wird.
Stellen Sie sich die folgende Anwendung vor, die Zahlen stapelweise in eine Datei schreibt:
<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>
Um einen Shutdown-Hook in diese Anwendung zu integrieren, folgen Sie diesen Schritten:
<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>
Durch die Implementierung eines Shutdown-Hooks können Sie für eine höhere Ausfallsicherheit sorgen Anwendung, die vor dem Beenden die erforderlichen Bereinigungsaufgaben ausführt.
Das obige ist der detaillierte Inhalt vonWie kann ein Shutdown-Hook in Java verwendet werden, um eine ordnungsgemäße Beendigung einer Anwendung sicherzustellen, insbesondere bei Dateivorgängen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!