En attente de la fin du thread avec ExecutorService
Lors de l'exécution simultanée de plusieurs tâches à l'aide d'un ExecutorService, il devient crucial de gérer efficacement les notifications d'achèvement. Cet article explore la meilleure approche pour attendre la fin de tous les threads sans s'appuyer sur des boucles infinies.
Comme décrit dans le problème, une boucle infinie n'est pas considérée comme une solution optimale. Au lieu de cela, ExecutorService fournit un mécanisme intégré pour gérer l'achèvement des tâches : les méthodes shutdown() et waitTermination().
Utilisation de shutdown() et waitTermination()
L'interface ExecutorService propose la méthode shutdown(), qui signale à ExecutorService de ne plus accepter de nouvelles tâches. Une fois que toutes les tâches actuellement soumises sont terminées, ExecutorService se terminera.
Pour attendre la fin de la tâche, la méthode waitTermination() est utilisée. Cette méthode prend deux paramètres :
Dans l'exemple fourni dans la question, le code peut être modifié comme suit :
ExecutorService taskExecutor = Executors.newFixedThreadPool(4); while(...) { taskExecutor.execute(new MyTask()); } taskExecutor.shutdown(); try { taskExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); } catch (InterruptedException e) { ... }
Le timeout Long.MAX_VALUE garantit que la méthode waitTermination() se bloque jusqu'à ce que toutes les tâches soient terminées. Si l'achèvement de la tâche est urgent, un délai d'attente fini peut être spécifié.
Conclusion
L'utilisation des méthodes shutdown() et waitTermination() fournit un moyen fiable et efficace attendre que tous les threads se terminent sans recourir à des boucles infinies. Cette approche simplifie la gestion des tâches et garantit l'achèvement des threads de manière contrôlée.
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!