Interrumpir un hilo en Java

En subprocesos de Java, si algún subproceso está en estado de suspensión o espera (es decir, se invoca sleep() o wait()), al llamar al método interrupt() en el subproceso, se rompe el estado de suspensión o espera y se genera InterruptedException. Si el subproceso no está en estado de suspensión o espera, llamar al método interrupt() realiza un comportamiento normal y no interrumpe el subproceso, pero establece el indicador de interrupción en verdadero. 

Método de interrupción(): si algún subproceso está inactivo o esperando un estado, entonces, utilizando el método de interrupción(), podemos interrumpir la ejecución de ese subproceso mostrando InterruptedException. Un subproceso que está en estado de suspensión o espera se puede interrumpir con la ayuda del método interrupt() de la clase Thread.

Ejemplo: supongamos que hay dos subprocesos y si uno de los subprocesos está bloqueado en una invocación de los métodos wait(), wait(long) o wait(long, int) de la clase Object, o de join() , join (largo), unir (largo, int), dormir (largo) o dormir (largo, int), métodos de esta clase, luego su estado de interrupción se borrará y recibirá una InterruptedException, que le da la oportunidad a otro hilo para ejecutar el método run() correspondiente de otro subproceso, lo que da como resultado un alto rendimiento y reduce el tiempo de espera de los subprocesos.

Diferentes escenarios donde podemos interrumpir un hilo

Caso 1: Interrumpir un subproceso que no deja de funcionar: en el programa, manejamos la InterruptedException usando el bloque try and catch, por lo que cada vez que un subproceso interrumpe el subproceso que se está ejecutando actualmente, saldrá del estado de suspensión pero no dejará de funcionar. . 

Java

// Java Program to illustrate the
// concept of interrupt() method
// while a thread does not stops working
  
class MyClass extends Thread {
    public void run()
    {
        try {
            for (int i = 0; i < 5; i++) {
                System.out.println("Child Thread executing");
  
                // Here current threads goes to sleeping state
                // Another thread gets the chance to execute
                Thread.sleep(1000);
            }
        }
        catch (InterruptedException e) {
            System.out.println("InterruptedException occur");
        }
    }
}
  
class Test {
    public static void main(String[] args)
            throws InterruptedException
    {
        MyClass thread = new MyClass();
        thread.start();
  
        // main thread calls interrupt() method on
        // child thread
        thread.interrupt();
  
        System.out.println("Main thread execution completes");
    }
}
Producción

Main thread execution completes
Child Thread executing
InterruptedException occur

Caso 2: Interrumpir un hilo que deja de funcionar: en el programa, después de interrumpir el hilo que se está ejecutando actualmente, lanzamos una nueva excepción en el bloque catch para que deje de funcionar.

Java

// Java Program to illustrate the
// concept of interrupt() method
// while a thread stops working
  
class Geeks extends Thread {
    public void run()
    {
        try {
            Thread.sleep(2000);
            System.out.println("Geeksforgeeks");
        }
        catch (InterruptedException e) {
            throw new RuntimeException("Thread " +
                                    "interrupted");
        }
    }
    public static void main(String args[])
    {
        Geeks t1 = new Geeks();
        t1.start();
        try {
            t1.interrupt();
        }
        catch (Exception e) {
            System.out.println("Exception handled");
        }
    }
}

Producción

Exception in thread "Thread-0" java.lang.RuntimeException: Thread interrupted
    at Geeks.run(File.java:13)

Caso 3: Interrupción de un hilo que funciona normalmente: En el programa, no ocurre ninguna excepción durante la ejecución del hilo. Aquí, la interrupción solo establece el indicador interrumpido en verdadero, que los programadores de Java pueden usar más adelante. 

Java

// Java Program to illustrate the concept of
// interrupt() method
  
class Geeks extends Thread {
    public void run()
    {
        for (int i = 0; i < 5; i++)
            System.out.println(i);
    }
    public static void main(String args[])
    {
        Geeks t1 = new Geeks();
        t1.start();
        t1.interrupt();
    }
}
Producción

0
1
2
3
4

Este artículo es una contribución de Bishal Kumar Dubey . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *