Executores Java: aguarde o término da tarefa. [duplicado

Esta pergunta já tem uma resposta aqui:

Como esperar que todos os threads terminem usando o ExecutorServic 24 respostas

Preciso enviar uma série de tarefas e esperar por elas até que todos os resultados estejam disponíveis. Cada um deles adiciona umString para umVector (que é sincronizado por padrão). Preciso iniciar uma nova tarefa para cada resultado no vetor, mas preciso fazer isso somente quando todas as tarefas anteriores pararem de fazer seu trabalho.

Quero usar o Java Executor, em particular tentei usarExecutors.newFixedThreadPool(100) para usar um número fixo de encadeamentos (eu tenho um número variável de tarefas que pode ser 10 ou 500), mas sou novo com executores e não sei como aguardar o término da tarefa. Isso é algo como um pseudocódigo do que meu programa precisa fazer:

ExecutorService e = Executors.newFixedThreadPool(100);
while(true){

/*do something*/

for(...){
<start task>
}

<wait for all task termination>

for each String in result{
<start task>
}

<wait for all task termination>
}

Não consigo fazer o e.shutdown porque estou em um momento (verdadeiro) e preciso reutilizar oexecutorService ...

Pode me ajudar? Você pode me sugerir um guia / livro sobre executores java?

questionAnswers(5)

yourAnswerToTheQuestion