Quelle est la manière la plus simple d'attendre que toutes les tâches ExecutorService
se 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();
}
ComputeDTask
implé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.
uniquePhrases
contient 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