Java ExecutorService: waititTermination de todas as tarefas criadas recursivamente
Eu uso umExecutorService
para executar uma tarefa. Essa tarefa pode criar recursivamente outras tarefas que são enviadas para a mesmaExecutorService
e essas tarefas filho também podem fazer isso.
Agora tenho o problema que quero aguardar até que todas as tarefas sejam concluídas (ou seja, todas as tarefas sejam concluídas e não tenham enviado novas) antes de continuar.
Eu não consigo chamarExecutorService.shutdown()
no encadeamento principal porque isso impede que novas tarefas sejam aceitas peloExecutorService
.
E chamandoExecutorService.awaitTermination()
parece não fazer nada seshutdown
não foi chamado.
Então, eu estou meio preso aqui. Não pode ser tão difícil para oExecutorService
ver que todos os trabalhadores estão ociosos, pode? A única solução deselegante que eu poderia encontrar é usar diretamente umThreadPoolExecutor
e consultar suagetPoolSize()
de vez em quando. Realmente não há maneira melhor de fazer isso?