Was ist der einfachste Weg, um zu warten, bis alle Aufgaben erledigt sind ExecutorService
? Meine Aufgabe ist in erster Linie rechnerisch, daher möchte ich nur eine große Anzahl von Jobs ausführen - einen auf jedem Kern. Im Moment sieht mein Setup so aus:
ExecutorService es = Executors.newFixedThreadPool(2);
for (DataTable singleTable : uniquePhrases) {
es.execute(new ComputeDTask(singleTable));
}
try{
es.wait();
}
catch (InterruptedException e){
e.printStackTrace();
}
ComputeDTask
implementiert lauffähig. Dies scheint die Aufgaben korrekt auszuführen, aber der Code stürzt wait()
mit ab IllegalMonitorStateException
. Das ist seltsam, weil ich mit einigen Spielzeugbeispielen herumgespielt habe und es schien zu funktionieren.
uniquePhrases
enthält mehrere Zehntausende von Elementen. Sollte ich eine andere Methode verwenden? Ich suche etwas so Einfaches wie möglich
Executors.newFixedThreadPool(System.getRuntime().availableProcessors());
es
), wenn Sie darauf warten möchten - die Sperre wird während des Wartens automatisch aufgehoben