Interrupt() a un hilo del ThreadPoolExecuted
Hola amigos...tengo unas cuantas dudas respescto al metodo interrupt(). Ya leí la documentación de Java, per oaún no me queda muy claro.
SUponiendo que tengo un ThreadPoolExecutor (5 hilos en paralelo, 10 máximo, ...)
Qué pasa si hago un hilo4.interrupt()?? el hilo se termina lo que estaba haciendo y se "libera" quedando a la espera de otra tarea a ejecutar??? en qué estado queda??? Runnable o Active? ocupa el mismo espacio n memoria si ejecuta otra tarea??
Muchas gracias desde ya.
- Inicie sesión o regístrese para enviar comentarios
no
El hilo lo interrumpes y queda inutilizable, el thread pool probablemente lo desechará y debe crear uno nuevo para seguir corriendo tareas, pero eso depende de la implementación y parámetros que tenga el thread pool.
Por eso mismo es que los thread pools dan acceso a sus hilos, para que no los interrumpan ni nada por el estilo.
Por ejemplo...tengo una
Por ejemplo...tengo una pequeña aplicación de prueba...que me landa el siguiente log:
INICIO: PROC1-3 ID: 11.
INICIO: PROC1-2 ID: 10.
INICIO: PROC1-1 ID: 9.
**************************
PROC1-2 INTERRUMPIDO
INICIO: PROC1-4 ID: 10.
**************************
FIN: PROC1-4. Time: 8002
INICIO: PROC1-5 ID: 10.
**************************
**************************
FIN: PROC1-5. Time: 13002
**************************
FIN: PROC1-1. Time: 15014
FIN: PROC1-3. Time: 15014
**************************
El codigo del RUN():
La configuración del ThreadPoolExecutor(3,3,5,Queue);
En el método main(), envié un interrurpt() al Thread "PROC1-2", y mi duda está en que el "ID : 10" aparece nuevamente para el thread "PROC1-4".
Entonces, el Hilo que ejecutaba la tarea PROC1-2 después del interrupt() ejecuta la tarea PROC1-4????
Interrupt
Como dice aquí no necesariamente que interrumpas el hilo quiere decir que se muera, eso depende de la implementación:
Interrupt Thread
Cuando capturas la excepción InterruptedException imprimes el nombre del hilo, y un mensaje de que fue interrumpido cierto ? imprime el metodo isAlive y seguramente devolverá true, guarda esa referencia y checa si sigue viva despues de que imprimio el mensaje.