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 :
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();
}
}
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
if (!pool.awaitTermination(60, TimeUnit.SECONDS))
par
while (!pool.awaitTermination(60, TimeUnit.SECONDS))
pour continuer à attendre la fin de la tâche.
Résumé des méthodes d'arrêt
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3