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 содержит несколько десятков тысяч элементов. Должен ли я использовать другой метод? Я ищу что-то максимально простое

Ответы на вопрос(14)

Ваш ответ на вопрос