Cerrar correctamente Java ExecutorService
Los ejecutores son una forma conveniente de administrar y ejecutar tareas simultáneamente en aplicaciones Java. Sin embargo, un apagado inadecuado puede provocar comportamientos inesperados o problemas de rendimiento. Esta guía proporciona una explicación detallada de cómo cerrar correctamente un ExecutorService, asegurando que todas las tareas finalicen o cancelen.
Comprensión del cierre de ExecutorService
ExecutorService ofrece dos métodos de apagado principales :
Es importante tener en cuenta que el apagado es No se garantiza que finalice todas las tareas. Las tareas que no responden a las interrupciones o que tienen operaciones de larga duración pueden permanecer activas.
Procedimiento de apagado recomendado
La documentación de Oracle sugiere el siguiente enfoque para un apagado ordenado:
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();
}
}
Este enfoque garantiza que las tareas existentes puedan finalizar y al mismo tiempo evita nuevos envíos. Si el proceso de apagado tarda más de lo esperado, puede reemplazar
if (!pool.awaitTermination(60, TimeUnit.SECONDS))
con
while (!pool.awaitTermination(60, TimeUnit.SECONDS))
para continuar esperando la tarea finalización.
Resumen de los métodos de apagado
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3