Desligando o Java ExecutorService
Os executores são uma maneira conveniente de gerenciar e executar tarefas simultaneamente em aplicativos Java. No entanto, o desligamento inadequado pode levar a problemas inesperados de comportamento ou desempenho. Este guia fornece uma explicação detalhada de como encerrar corretamente umExecutorService, garantindo que todas as tarefas sejam encerradas ou canceladas.
Compreendendo o desligamento do ExecutorService
ExecutorService oferece dois métodos principais de desligamento :
É importante observar que o encerramento não garante o encerramento de todas as tarefas. Tarefas que não respondem a interrupções ou têm operações de longa duração podem permanecer ativas.
Procedimento de desligamento recomendado
A documentação da Oracle sugere a seguinte abordagem para um desligamento normal:
void shutdownAndAwaitTermination(ExecutorService pool) {
pool.shutdown();
try {
// Wait for existing tasks to terminate
if (!pool.awaitTermination(60, TimeUnit.SECONDS)) {
pool.shutdownNow();
// Wait for tasks to respond to cancellation
if (!pool.awaitTermination(60, TimeUnit.SECONDS))
System.err.println("Pool did not terminate");
}
} catch (InterruptedException ie) {
pool.shutdownNow();
Thread.currentThread().interrupt();
}
}
Essa abordagem garante que as tarefas existentes possam ser concluídas, evitando novos envios. Se o processo de desligamento demorar mais do que o esperado, você pode substituir
if (!pool.awaitTermination(60, TimeUnit.SECONDS))
com
while (!pool.awaitTermination(60, TimeUnit.SECONDS))
para continuar aguardando a conclusão da tarefa.
Resumo dos métodos de desligamento
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3