Jaki jest najprostszy sposób oczekiwania na ExecutorService
zakończenie wszystkich zadań ? Moje zadanie jest głównie obliczeniowe, więc chcę po prostu uruchomić dużą liczbę zadań - po jednym na każdym rdzeniu. W tej chwili moja konfiguracja wygląda następująco:
ExecutorService es = Executors.newFixedThreadPool(2);
for (DataTable singleTable : uniquePhrases) {
es.execute(new ComputeDTask(singleTable));
}
try{
es.wait();
}
catch (InterruptedException e){
e.printStackTrace();
}
ComputeDTask
implementuje runnable. Wygląda na to, że poprawnie wykonuje zadania, ale kod zawiesza się wait()
przy IllegalMonitorStateException
. To dziwne, bo bawiłem się przykładami zabawek i wyglądało na to, że działają.
uniquePhrases
zawiera kilkadziesiąt tysięcy elementów. Czy powinienem używać innej metody? Szukam czegoś tak prostego, jak to możliwe
Executors.newFixedThreadPool(System.getRuntime().availableProcessors());
es
), gdy chcesz na niego poczekać - blokada zostanie automatycznie zwolniona podczas oczekiwania