Maison >Java >javaDidacticiel >Comment attendre efficacement la fin d'une tâche à l'aide d'ExecutorService ?

Comment attendre efficacement la fin d'une tâche à l'aide d'ExecutorService ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-14 04:41:09345parcourir

How to Efficiently Await Task Completion Using ExecutorService?

ExecutorService : attendre la fin des tâches

Lors de l'utilisation d'ExecutorService, un développeur peut rencontrer le besoin de suspendre l'exécution jusqu'à ce que toutes les tâches assignées soient terminées. Cette enquête explore l'approche la plus simple pour atteindre cet objectif.

Question :

Exécuter une multitude de tâches de calcul, une par cœur, et suspendre l'exécution jusqu'à leur achèvement. L'implémentation actuelle utilise ExecutorService.execute() et es.wait(), mais fait face à une IllegalMonitorStateException.

Réponse :

Employez ExecutorService.invokeAll(), une solution simple qui accomplit la fonctionnalité souhaitée avec une seule ligne de code:

List<Callable<Object>> todo = new ArrayList<Callable<Object>>(singleTable.size());

for (DataTable singleTable: uniquePhrases) {
    todo.add(Executors.callable(new ComputeDTask(singleTable))); 
}

List<Future<Object>> answers = es.invokeAll(todo);

invokeAll() suspend l'exécution jusqu'à ce que toutes les tâches soient terminées, rendant l'arrêt manuel et waitTermination() inutiles. Cette approche s'aligne sur les instances ExecutorService réutilisables sur plusieurs exécutions.

Pour une exploration plus approfondie des sujets connexes, consultez ces références :

  • [SO : Await Thread Completion](URL)
  • [SO : Valeurs de retour du fil](URL)
  • [SO : InvoqueAll() et Collection>](URL)
  • [SO : Considérations sur la synchronisation](URL)

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn