Arrêter efficacement un ExecutorService Java
Il est crucial de terminer correctement un ExecutorService en Java pour éviter les fuites de ressources et maintenir la stabilité du système. Bien que la méthode shutdownNow() puisse ne pas fournir une terminaison garantie, il existe des approches recommandées pour garantir un arrêt efficace.
La méthode préférée recommandée par la documentation de l'API d'Oracle implique un processus en deux étapes :
1. Initier l'arrêt ordonné :
Appelez pool.shutdown() pour désactiver la soumission de nouvelles tâches. Cela permet de terminer les tâches en cours d'exécution, mais aucune nouvelle ne sera acceptée.
2. Attendre la résiliation ou la résiliation forcée :
Utilisez pool.awaitTermination(60, TimeUnit.SECONDS) pour attendre la fin des tâches. Si les tâches en attente prennent trop de temps, vous pouvez prolonger le délai d'attente ou utiliser une boucle avec while (!pool.awaitTermination(60, TimeUnit.SECONDS)). Si la fin n'est pas atteinte dans le délai spécifié, appelez pool.shutdownNow() pour forcer la fin des tâches restantes.
Méthodes d'arrêt supplémentaires :
shutdown( ): Initie un arrêt ordonné, permettant aux tâches en attente de se terminer avant de désactiver les nouvelles soumissions.
shutdownNow(): Tente d'arrêter toutes les tâches immédiatement, renvoyant une liste de tâches incomplètes.
awaitTermination() : Bloque jusqu'à ce que toutes les tâches soient terminées, que le délai d'attente se produise ou que le thread soit interrompu.
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!