Como esperar que todos os tópicos terminem usando o ExecutorService?

Eu preciso executar uma quantidade de tarefas 4 por vez, algo assim:

ExecutorService taskExecutor = Executors.newFixedThreadPool(4);
while(...) {
    taskExecutor.execute(new MyTask());
}
//...wait for completion somehow

Como posso ser notificado quando todos estiverem concluídos? Por enquanto, não consigo pensar em nada melhor do que configurar um contador de tarefas globais e diminuí-lo no final de cada tarefa. Em seguida, monitore em loop infinito esse contador para se tornar 0; ou obter uma lista de futuros e no monitor de loop infinito é feito para todos eles. Quais são as melhores soluções que não envolvem loops infinitos?

Obrigado.

questionAnswers(24)

yourAnswerToTheQuestion