threads thread programming parallel invokeall example ejemplo concurrent concurrent-programming

concurrent programming - programming - ¿Cómo detener la ejecución de Executor ThreadPool en java?



java concurrency example (2)

Estoy trabajando en los Ejecutores en java para ejecutar simultáneamente más subprocesos a la vez. Tengo un conjunto de Objetos Ejecutables y los asigno a los Ejecutores. El Ejecutor funciona bien y todo está bien. Pero después de que todas las tareas se ejecutan en el grupo, el programa java no termina, creo que el Ejecutor toma algunas Es hora de matar los hilos. Por favor, que alguien me ayude a reducir el tiempo empleado por el ejecutor después de ejecutar todas las tareas.


La clase ExecutorService tiene 2 métodos solo para esto: shutdown() y shutdownNow() .

Después de usar el método shutdown (), puede llamar a awaitTermination() para bloquear hasta que todas las tareas iniciadas se hayan completado. Incluso puede proporcionar un tiempo de espera para evitar la espera para siempre.

Es posible que desee hacer clic en algunos de estos enlaces que estoy proporcionando. Van directamente a los documentos donde usted mismo puede leer sobre estas cosas.


executor.shutdown () con awaitTermination (timeout) no mata los hilos. (es decir), si su tarea ejecutable está dentro de un bucle de sondeo, no mata la tarea. Todo lo que hace es interrumpir sus tareas ejecutables cuando se alcanza el tiempo de espera. Por lo tanto, en el código de su clase ejecutable, si espera en alguna condición, es posible que desee cambiar la condición como,

while (flagcondition && !Thread.currentThread().isInterrupted()) {}

Esto asegura que la tarea se detenga cuando el hilo se interrumpe a medida que el bucle while termina. Alternativamente, es posible que desee capturar la excepción interrumpida y establecer flag = false en el bloque catch para terminar el hilo.

try { // do some stuff and perform a wait that might throw an InterruptedException } catch (InterruptedException e) { flagcondition = false; }

También es posible que desee utilizar un generador de perfiles para examinar por qué algunos subprocesos no se han completado.