Maison >Java >javaDidacticiel >Comment puis-je m'assurer que toutes les tâches sont terminées avant de procéder à un ExecutorService ?

Comment puis-je m'assurer que toutes les tâches sont terminées avant de procéder à un ExecutorService ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-28 08:14:13839parcourir

How Can I Ensure All Tasks Complete Before Proceeding with an ExecutorService?

ExecutorService - Une solution pour attendre l'achèvement des tâches

Lorsque vous travaillez avec un grand nombre de tâches de calcul qui doivent être exécutées simultanément, il est Il est important d'avoir un mécanisme en place pour attendre que toutes les tâches soient terminées. Cela garantit que les actions ultérieures ne peuvent être effectuées qu'une fois toutes les tâches terminées.

Dans votre exemple, où vous essayez d'utiliser ExecutorService.wait() pour y parvenir, vous rencontrez une IllegalMonitorStateException. Cette erreur se produit car wait() est censé être utilisé lors de l'attente du verrou intrinsèque d'un objet, ce qui n'est pas applicable dans ce scénario.

La solution la plus simple consiste à exploiter ExecutorService.invokeAll(). Cette méthode prend une collection de tâches Callable, les exécute en parallèle et renvoie une liste d'objets Future. Chaque Future représente le résultat d'une tâche spécifique. Par défaut, invoqueAll() bloquera jusqu'à ce que toutes les tâches soient terminées avant de renvoyer la liste des objets Future.

Voici comment modifier votre code :

ExecutorService es = Executors.newFixedThreadPool(2);
List<Callable<Object>> tasks = new ArrayList<>();

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

List<Future<Object>> results = es.invokeAll(tasks);

Dans ce code mis à jour, ExecutorService .invokeAll() attendra que toutes les tâches soient terminées, vous permettant de poursuivre vos actions ultérieures en toute confiance.

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