Implementar Runnable vs Extend Thread en Java

Como se discutió en el artículo de subprocesos múltiples de Java , podemos definir un subproceso de las siguientes dos maneras:

  • Extendiendo la clase Thread
  • Implementando la interfaz Runnable

En el primer enfoque, Nuestra clase siempre extiende la clase Thread. No hay posibilidad de extender ninguna otra clase. Por lo tanto, nos faltan los beneficios de herencia. En el segundo enfoque, al implementar la interfaz Runnable, podemos extender cualquier otra clase. Por lo tanto, podemos utilizar los beneficios de la herencia.
Por las razones anteriores, se recomienda implementar el enfoque de interfaz Runnable en lugar de extender la clase Thread.

Las diferencias significativas entre extender la clase Thread e implementar la interfaz Runnable:

  • Cuando extendemos la clase Thread, no podemos extender ninguna otra clase incluso si la necesitamos y cuando implementamos Runnable, podemos guardar un espacio para que nuestra clase extienda cualquier otra clase en el futuro o ahora.
  • Cuando extendemos la clase Thread, cada uno de nuestros hilos crea un objeto único y se asocia con él. Cuando implementamos Runnable, comparte el mismo objeto con varios subprocesos.

Echemos un vistazo a los siguientes programas para una mejor comprensión:

// Java program to illustrate defining Thread
// by extending Thread class
  
// Here we cant extends any other class
class Test extends Thread 
{
    public void run()
    {
        System.out.println("Run method executed by child Thread");
    }
    public static void main(String[] args)
    {
        Test t = new Test();
        t.start();
        System.out.println("Main method executed by main thread");
    }
}

Producción:

Main method executed by main thread
Run method executed by child Thread
// Java program to illustrate defining Thread
// by implements Runnable interface
class Geeks {
    public static void m1()
    {
        System.out.println("Hello Visitors");
    }
}
  
// Here we can extends any other class
class Test extends Geeks implements Runnable {
    public void run()
    {
        System.out.println("Run method executed by child Thread");
    }
    public static void main(String[] args)
    {
        Test t = new Test();
        t.m1();
        Thread t1 = new Thread(t);
        t1.start();
        System.out.println("Main method executed by main thread");
    }
}

Producción:

Hello Visitors
Main method executed by main thread
Run method executed by child Thread

NOTA: En el caso de subprocesos múltiples, no podemos predecir el orden exacto de salida porque variará de un sistema a otro o de JVM a JVM.

Referencia: https://stackoverflow.com/questions/15471432/why-implements-runnable-is-preferred-over-extends-thread

Este artículo es una contribución de Bishal Kumar Dubey . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@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 *