En Java, les hooks d'arrêt permettent aux applications d'effectuer des tâches de nettoyage à la fin. Cela peut être utile pour garantir que le programme s'arrête correctement en cas d'interruption inattendue.
Considérez l'application suivante qui écrit des nombres dans un fichier par lots :
<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>
Pour intégrer un hook d'arrêt dans cette application, suivez ces étapes :
<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>
En implémentant un hook d'arrêt, vous pouvez fournir un hook d'arrêt plus résilient. application qui effectue les tâches de nettoyage nécessaires avant de terminer.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!