ExecutorService, cómo esperar a que finalicen todas las tareas

¿Cuál es la forma más sencilla de esperar todas las tareas deExecutorService ¿para terminar? Mi tarea es principalmente computacional, por lo que solo quiero ejecutar una gran cantidad de trabajos, uno en cada núcleo. En este momento mi configuración se ve así:

ExecutorService es = Executors.newFixedThreadPool(2);
for (DataTable singleTable : uniquePhrases) {   
    es.execute(new ComputeDTask(singleTable));
}
try{
    es.wait();
} 
catch (InterruptedException e){
    e.printStackTrace();
}

ComputeDTask Implementos ejecutables. Esto parece ejecutar las tareas correctamente, pero el código fallawait() conIllegalMonitorStateException. Esto es extraño, porque jugué con algunos ejemplos de juguetes y parecía funcionar.

uniquePhrases contiene varias decenas de miles de elementos. ¿Debo estar usando otro método? Estoy buscando algo lo mas simple posible

Respuestas a la pregunta(14)

Su respuesta a la pregunta