style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

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.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

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():

private String strName;
...
...
public void run() {
       
                Thread.currentThread().setName(this.strNombre);
                               
                try
                {                              
                        System.out.printf("INICIO: "+Thread.currentThread().getName() +" ID: "+Thread.currentThread().getId()+".\n");
                       
                        /***EJECUCION DE LA TAREA***/
                        Thread.currentThread().sleep(50000);   
                       

                        System.out.println("FIN: "+Thread.currentThread().getName()+". Time: " + (System.currentTimeMillis()-time));
                       
                }catch(InterruptedException ex){
                        ....
                }catch (CancellationException ex){
                        ....
                }catch (Exception ex){
                        .....
                }
        }

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????

Imagen de Cid

Interrupt

Como dice aquí no necesariamente que interrumpas el hilo quiere decir que se muera, eso depende de la implementación:

Interrupt Thread

Interrupts

An interrupt is an indication to a thread that it should stop what it is doing and do something else. It's up to the programmer to decide exactly how a thread responds to an interrupt, but it is very common for the thread to terminate.

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.

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">