Diferencia entre Thread Class e Runnable Interface en Java

Autor: Laura McKinney
Fecha De Creación: 1 Abril 2021
Fecha De Actualización: 14 Mayo 2024
Anonim
313. By extending Thread class vs By implementing Runnable interface in Java Programming (Hindi)
Video: 313. By extending Thread class vs By implementing Runnable interface in Java Programming (Hindi)

Contenido


Un hilo se puede definir de dos maneras. Primero por extender una clase de subproceso que ya ha implementado una interfaz Runnable. Segundo, por directamente implementar una interfaz Runnable. Cuando define un hilo extendiendo la clase Thread, debe anular el método run () en la clase Thread. Cuando define un hilo que implementa una interfaz Runnable, debe implementar el único método run () de la interfaz Runnable. La diferencia básica entre Thread y Runnable es que cada thread definido al extender la clase Thread crea un objeto único y se asocia con ese objeto. Por otro lado, cada hilo definido al implementar la interfaz Runnable comparte el mismo objeto.

Observemos algunas otras diferencias entre Thread y Runnable con la ayuda del cuadro de comparación que se muestra a continuación:

  1. Cuadro comparativo
  2. Definición
  3. Diferencias clave
  4. Conclusión

Cuadro comparativo

Bases para la comparaciónHiloEjecutable
BASICCada hilo crea un objeto único y se asocia con él.Múltiples hilos comparten los mismos objetos.
Memoria A medida que cada hilo crea un objeto único, se requiere más memoria.Como varios subprocesos comparten el mismo objeto, se utiliza menos memoria.
ExtensibleEn Java, la herencia múltiple no está permitida, por lo tanto, después de que una clase extiende la clase Thread, no puede extender ninguna otra clase.Si una clase define un hilo que implementa la interfaz Runnable, tiene la posibilidad de extender una clase.
Utilizar Un usuario debe extender la clase de subproceso solo si desea anular los otros métodos en la clase de subproceso.Si solo desea especializar el método de ejecución, la implementación de Runnable es una mejor opción.
Acoplamiento La clase Thread extensible introduce un acoplamiento estrecho ya que la clase contiene el código de la clase Thread y también el trabajo asignado al hiloLa implementación de la interfaz Runnable introduce un acoplamiento suelto, ya que el código de Thread está separado del trabajo de Threads.


Definición de clase de subproceso

Hilo es una clase en java.lang paquete. La clase Thread extiende un Objeto clase, e implementa Ejecutable interfaces La clase Thread tiene constructores y métodos para crear y operar en el thread. Cuando creamos múltiples hilos, cada hilo crea un objeto único y se asocia con ese objeto. Si crea un subproceso que extiende la clase de subproceso, además no puede extender ninguna otra clase, ya que Java no admite la herencia múltiple. Por lo tanto, debe elegir extender la clase Thread solo cuando también desee anular algunos otros métodos de la clase Thread. Veamos un ejemplo de creación de un hilo que extiende una clase de hilo.

/ * Definir un hilo * / Class Mythread extiende el hilo {/ * trabajo del hilo * / public void run () {for (int i = 0; i <10; i ++) {System.Out.ln ("Child Thread" ); }} Clase mainThread {/ * trabajo del hilo principal * / public static void main (String args) {Mythread mt = new Mythread (); / * el subproceso principal creó el subproceso secundario * / mt.start (); for (int i = 0; i <10; i ++) {System.Out. ("Tema principal"); }}} / * Salida * / Hilo principal Hilo principal Hilo principal Hilo principal Hilo hijo Hilo hijo Hilo hijo Hilo hijo Hilo hijo Hilo principal Hilo hijo Hilo principal Hilo principal Hilo hijo Hilo hijo Hilo principal Hilo principal Hilo hijo Hilo hijo Hilo hijo Hilo principal

En el código anterior, creo una clase Mythread que extiende la clase Thread y anula un método de ejecución de la clase Thread. En la clase que contiene el método principal, creo un objeto de hilo (mt) de la clase Mythread y al usar el objeto de hilo invoqué el método start (). El método de inicio inicia la ejecución del hilo y al mismo tiempo JVM invoca el método de ejecución del hilo. Ahora hay dos hilos en el programa, uno principal y otro secundario creado por el hilo principal. La ejecución de ambos subprocesos ocurre simultáneamente, pero no se puede pretender la salida exacta.


Definición de interfaz ejecutable

Ejecutable es una interfaz en java.lang paquete. Implementando la interfaz Runnable podemos definir un hilo. La interfaz ejecutable tiene un solo método correr(), implementado por la clase que implementa la interfaz Runnable. Cuando elige definir un hilo que implementa una interfaz Runnable, todavía tiene la opción de extender cualquier otra clase. Cuando crea varios subprocesos al implementar la interfaz Runnable, cada subproceso comparte la misma instancia ejecutable. aprendamos cómo definir un hilo usando la interfaz Runnable.

/ * Definir un subproceso * / Class Runnablethread implementa Runnable {/ * trabajo del subproceso * / public void run () {for (int i = 0; i <10; i ++) {System.Out.ln ("Subproceso secundario" ); }} Clase mainThread {/ * trabajo del hilo principal * / public static void main (String args) {Mythread rt = new Mythread (); / * hilo principal creado el objeto ejecutable * / Thread t = new Thread (rt); / * el subproceso principal crea un subproceso secundario y pasa el objeto ejecutable * / t.start (); for (int i = 0; i <10; i ++) {System.Out. ("Tema principal"); }}} / * Salida * / Hilo principal Hilo principal Hilo principal Hilo principal Hilo hijo Hilo hijo Hilo hijo Hilo hijo Hilo hijo Hilo principal Hilo hijo Hilo principal Hilo principal Hilo hijo Hilo hijo Hilo principal Hilo principal Hilo hijo Hilo hijo Hilo hijo Hilo principal

En el código anterior, creé una clase Runnablethread que implementa la interfaz Runnable y define el trabajo del hilo implementando el método run () de la interfaz Runnable. Luego creo un hilo principal de clase que contiene el método principal. Dentro del método principal, declaró un objeto ejecutable de la clase Runnablethread y pasé este objeto al constructor de Thread mientras declaraba un thread. De esta manera, vinculé el objeto de hilo (t) con un objeto ejecutable (rt). Luego, el objeto thread invoca el método de inicio del thread que invoca el método run de la clase Runnablethread. Si no hubiera vinculado el objeto ejecutable con el objeto Thread, entonces el método de inicio de los hilos habría invocado el método de ejecución de la clase Thread. Ahora, nuevamente, hay dos subprocesos en el código, el subproceso principal y el subproceso principal crean un subproceso secundario, ambos se ejecutan simultáneamente, pero nunca se puede pretender una salida exacta.

Diferencias clave entre subprocesos y ejecutables en Java

  1. Cada hilo creado al extender la clase Thread crea un objeto único para él y se asocia con ese objeto. Por otro lado, cada subproceso creado mediante la implementación de una interfaz Runnable comparte la misma instancia ejecutable.
  2. Como cada hilo está asociado con un objeto único cuando se crea al extender la clase Thread, se requiere más memoria. Por otro lado, cada subproceso creado al implementar la interfaz Runnable comparte el mismo espacio de objeto, por lo tanto, requiere menos memoria.
  3. Si extiende la clase Thread, puede heredar cualquier otra clase, ya que Java no permite la herencia múltiple, mientras que la implementación de Runnable aún brinda la posibilidad de que una clase herede cualquier otra clase.
  4. Uno debe extender una clase Thread solo si tiene que anular o especializar algunos otros métodos de la clase Thread. Debe implementar una interfaz Runnable si solo desea especializar el método de ejecución.
  5. La extensión de la clase Thread introduce un acoplamiento estrecho en el código, ya que el código de Thread y el trabajo de thread están contenidos en la misma clase. Por otro lado, la implementación de la interfaz Runnable introduce un acoplamiento flojo en el código, ya que el código del subproceso está separado del trabajo asignado al subproceso.

Conclusión:

Se prefiere implementar una interfaz Runnable en lugar de extender la clase Thread. La implementación de Runnable hace que su código se acople libremente, ya que el código del subproceso es diferente de la clase que asigna el trabajo al subproceso. Requiere menos memoria y también permite que una clase herede cualquier otra clase.