Arrêter gracieusement Java ExecutorService
Les exécuteurs sont un moyen pratique de gérer et d'exécuter des tâches simultanément dans les applications Java. Cependant, un arrêt incorrect peut entraîner un comportement inattendu ou des problèmes de performances. Ce guide fournit une explication détaillée sur la façon d'arrêter correctement un ExecutorService, garantissant que toutes les tâches sont terminées ou annulées.
Comprendre l'arrêt d'ExecutorService
ExecutorService propose deux méthodes d'arrêt principales :
Il est important de noter que l'arrêt n'est pas garanti pour mettre fin à toutes les tâches. Les tâches qui ne répondent pas aux interruptions ou qui ont des opérations de longue durée peuvent rester actives.
Procédure d'arrêt recommandée
La documentation Oracle suggère l'approche suivante pour un arrêt progressif :
<code class="java">void shutdownAndAwaitTermination(ExecutorService pool) { pool.shutdown(); try { // Wait for existing tasks to terminate if (!pool.awaitTermination(60, TimeUnit.SECONDS)) { pool.shutdownNow(); // Wait for tasks to respond to cancellation if (!pool.awaitTermination(60, TimeUnit.SECONDS)) System.err.println("Pool did not terminate"); } } catch (InterruptedException ie) { pool.shutdownNow(); Thread.currentThread().interrupt(); } }</code>
Cette approche garantit que les tâches existantes peuvent se terminer tout en empêchant les nouvelles soumissions. Si le processus d'arrêt prend plus de temps que prévu, vous pouvez remplacer
<code class="java">if (!pool.awaitTermination(60, TimeUnit.SECONDS))</code>
par
<code class="java">while (!pool.awaitTermination(60, TimeUnit.SECONDS))</code>
pour continuer à attendre la fin de la tâche.
Résumé de l'arrêt Méthodes
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!