Что такое самый простой способ дождаться завершения всех задач ExecutorService
? Моя задача в первую очередь вычисляется, поэтому я просто хочу запустить большое количество заданий - по одному на каждое ядро. Сейчас моя установка выглядит следующим образом:ExecutorService, как дождаться завершения всех задач
ExecutorService es = Executors.newFixedThreadPool(2);
for (DataTable singleTable : uniquePhrases) {
es.execute(new ComputeDTask(singleTable));
}
try{
es.wait();
}
catch (InterruptedException e){
e.printStackTrace();
}
ComputeDTask
реализует работоспособной. Кажется, что выполнение задач выполняется правильно, но код падает на wait()
с IllegalMonitorStateException
. Это странно, потому что я играл с некоторыми примерами игрушек и, похоже, работал.
uniquePhrases
содержит несколько десятков тысяч элементов. Должен ли я использовать другой метод? Я ищу что-то максимально простое
Если вы хотите использовать wait (ответы говорят вам, что нет): вам всегда нужно синхронизировать объект (в данном случае 'es'), когда вы хотите его дождаться - блокировка будет автоматически выпущена при ожидании – mihi
лучшим способом инициализации ThreadPool является «Исполнители».newFixedThreadPool (System.getRuntime(). availableProcessors()); ' –
Runtime.getRuntime(). availableProcessors(); –