Quelle est la manière la plus simple d'attendre que toutes les tâches ExecutorServicese terminent? Ma tâche est principalement informatique, donc je veux juste exécuter un grand nombre de travaux - un sur chaque cœur. En ce moment, ma configuration ressemble à ceci:
ExecutorService es = Executors.newFixedThreadPool(2);
for (DataTable singleTable : uniquePhrases) {
es.execute(new ComputeDTask(singleTable));
}
try{
es.wait();
}
catch (InterruptedException e){
e.printStackTrace();
}
ComputeDTaskimplémente runnable. Cela semble exécuter correctement les tâches, mais le code se bloque wait()avec IllegalMonitorStateException. C'est étrange, parce que j'ai joué avec des exemples de jouets et que cela semblait fonctionner.
uniquePhrasescontient plusieurs dizaines de milliers d'éléments. Dois-je utiliser une autre méthode? Je cherche quelque chose d'aussi simple que possible
Executors.newFixedThreadPool(System.getRuntime().availableProcessors());
es) quand vous voulez l'attendre - le verrou sera automatiquement libéré en attendant