Arrêt progressif avec des hooks d'arrêt en Java
Garantir un arrêt progressif est crucial pour les applications Java robustes. Les hooks d'arrêt fournissent un mécanisme permettant d'exécuter des tâches de nettoyage avant la fin d'une application, garantissant ainsi l'achèvement des opérations critiques.
Exemple d'application
Considérons une application qui écrit des nombres dans un fichier. par lots de 100. Pour garantir qu'un lot se termine avant que le programme ne soit interrompu, nous pouvons implémenter un hook d'arrêt.
Implémentation
Ajouter une variable booléenne volatile statique keepRunning pour indiquer si l'application doit continuer à s'exécuter. Modifiez la méthode run() pour vérifier keepRunning avant d'écrire chaque lot :
<code class="java">for (int i = 0; i < N & keepRunning; ++i) writeBatch(pw, i);</code>
Dans main(), enregistrez un hook d'arrêt qui définit keepRunning sur false et attend la fin du thread principal :
<code class="java">final Thread mainThread = Thread.currentThread(); Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { keepRunning = false; mainThread.join(); } });</code>
Comment ça marche
Lorsque la JVM s'arrête, les hooks d'arrêt enregistrés sont exécutés simultanément. Notre hook définit keepRunning sur false, ce qui oblige la méthode run() à arrêter d'écrire des lots. Il attend ensuite la fin du thread principal (qui écrit les lots), garantissant que tous les lots sont terminés avant la fin du programme.
Conclusion
Les hooks d'arrêt fournissent une solution robuste moyen d'assurer un arrêt progressif des applications Java. En coordonnant l'arrêt des threads et les tâches de nettoyage, nous pouvons minimiser la perte de données et garantir une fermeture ordonnée des applications.
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!