Как проще всего дождаться 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
содержит несколько десятков тысяч элементов. Должен ли я использовать другой метод? Я ищу что-то максимально простое
Executors.newFixedThreadPool(System.getRuntime().availableProcessors());
es
), когда вы хотите его ждать - блокировка будет автоматически снята во время ожидания