Interfaz ejecutable en Java

java.lang.Runnable es una interfaz que debe implementar una clase cuyas instancias están destinadas a ser ejecutadas por un hilo. Hay dos formas de iniciar un nuevo subproceso: Subclase Subproceso e implementar Runnable. No es necesario subclasificar un subproceso cuando se puede realizar una tarea anulando solo el método run() de Runnable. 

Pasos para crear un hilo nuevo usando Runnable 

  1. Cree un implementador Runnable e implemente el método run(). 
  2. Cree una instancia de la clase Thread y pase el implementador al Thread, Thread tiene un constructor que acepta instancias Runnable.
  3. Invoque start() de la instancia de Thread, inicie llamadas internas run() del implementador. Invocar start() crea un nuevo hilo que ejecuta el código escrito en run(). Llamar a run() directamente no crea ni inicia un nuevo subproceso, se ejecutará en el mismo subproceso. Para iniciar una nueva línea de ejecución, llame a start() en el hilo. 

Ejemplo 1

java

public class RunnableDemo {
 
    public static void main(String[] args)
    {
        System.out.println("Main thread is- "
                        + Thread.currentThread().getName());
        Thread t1 = new Thread(new RunnableDemo().new RunnableImpl());
        t1.start();
    }
 
    private class RunnableImpl implements Runnable {
 
        public void run()
        {
            System.out.println(Thread.currentThread().getName()
                             + ", executing run() method!");
        }
    }
}

Producción:

Main thread is- main
Thread-0, executing run() method!

El resultado muestra dos subprocesos activos en el programa: el subproceso principal y Subproceso-0, el subproceso principal ejecuta el método principal, pero invocar el inicio en RunnableImpl crea e inicia un nuevo subproceso: Subproceso-0. ¿Qué sucede cuando Runnable encuentra una excepción? Runnable no puede lanzar una excepción marcada, pero RuntimeException puede lanzarse desde run(). Las excepciones no detectadas son manejadas por el controlador de excepciones del subproceso, si JVM no puede manejar o detectar excepciones, imprime el seguimiento de la pila y finaliza el flujo. 

Ejemplo 2

java

import java.io.FileNotFoundException;
 
public class RunnableDemo {
 
    public static void main(String[] args)
    {
        System.out.println("Main thread is- " +
                          Thread.currentThread().getName());
        Thread t1 = new Thread(new RunnableDemo().new RunnableImpl());
        t1.start();
    }
 
    private class RunnableImpl implements Runnable {
 
        public void run()
        {
            System.out.println(Thread.currentThread().getName()
                             + ", executing run() method!");
            /**
             * Checked exception can't be thrown, Runnable must
             * handle checked exception itself.
             */
            try {
                throw new FileNotFoundException();
            }
            catch (FileNotFoundException e) {
                System.out.println("Must catch here!");
                e.printStackTrace();
            }
 
            int r = 1 / 0;
            /*
             * Below commented line is an example
             * of thrown RuntimeException.
             */
            // throw new NullPointerException();
        }
    }
}

Producción:

Thread-0, executing run() method!
Must catch here!
java.io.FileNotFoundException
    at RunnableDemo$RunnableImpl.run(RunnableDemo.java:25)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "Thread-0" java.lang.ArithmeticException: / by zero
    at RunnableDemo$RunnableImpl.run(RunnableDemo.java:31)
    at java.lang.Thread.run(Thread.java:745)

El resultado muestra que Runnable no puede lanzar excepciones verificadas, FileNotFoundException en este caso, a las personas que llaman, debe manejar las excepciones verificadas en run() pero las RuntimeExceptions (lanzadas o generadas automáticamente) son manejadas por la JVM automáticamente.

Publicación traducida automáticamente

Artículo escrito por javargon 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 *