Hilo asociado con una clase

Cuando sea necesario que un hilo ejecute el método run de un objeto de cualquier otra clase que no esté derivada de Thread, los pasos a seguir son los siguientes:

  1. El objeto debe ser de una clase que implemente la interfaz Runnable, ya que es esta la que aporta el método run.
  2. Sobreescribir el método run con las sentencias que tiene que ejecutar el hilo.
  3. Crear un objeto de la clase.
  4. Crear un objeto de la clase Thread, pasando como argumento al constructor, el objeto cuya clase incluye el método run.
  5. Invocar el método start de la clase Thread.

Veamos un ejemplo:

public class Contador2 implements Runnable {

private Thread cuentaAtras;

// Constructor
public Contador2(String nombre) {
if (nombre != null) {
cuentaAtras.setName(nombre);
}
// El hilo ejecuta el método run
cuentaAtras.start();
}

public Contador2() {
this(null);
}

public void run() {

for (int i = 100; i > 0; i–) {
System.out.println(“\t” + cuentaAtras.getName() + ” ” + i + “\r”);

}
System.out.println();

}

}

La clase Contador2 no se deriva de Thread. Sin embargo, tiene un método run proporcionado por la interfaz Runnable. Por ello, cualquier objeto Contador2 puede ser pasado como argumento cuando se invoque al constructor de la clase Thread, cuya sintaxis es:

Thread(Runnable objeto)

Para poder lanzar un hilo asociado con la clase Contador2, primero tenemos que construir un objeto de la misma. Después, un objeto de la clase Thread pasando como argumento el objeto de la clase Contador2, y finalmente, enviar al objeto Thread el mensaje start. De estas dos últimas operaciones, se encarga el constructor Contador2.

Por ejemplo:

Contador2 cuentaReves = new Contador2(“Contador hacia atras”);

Esta forma de lanzar es más complicada  que la anterior. Sin embargo, hay razones suficientes para hacer este esfuerzo. Si el método run es parte de la interfaz de una clase cualquiera, tiene acceso a todos los miembros de esa clase, cosa que no ocurre si pertenece a una subclase Thread. Otra razón es que Java no permite la herencia múltiple, por lo que si escribimos una clase derivada de Thread, esa clase no puede ser a la vez una subclase de cualquier otra.

Y para aclarar términos, decir: “la clase Contador2 es un hilo” no es correcto desde el punto de vista de la programación orientada a objetos. Lo correcto es: “la clase Contador2 está asociada a un hilo”. ¡Que no se te olvide!

Vamos a ejecutar la aplicación siguiente:

public class TesteoContador {

public static void main(String[] args) {
Contador1 cuenta = new Contador1(“El contador: “);
Contador2 cuentaReves = new Contador2(“Contador hacia atras”);
}

}

Cuando ejecutes la aplicación anterior, el sistema lanza la ejecución del hilo primario (hilo padre) el cual, al ejecutarse, lanza la ejecución del hilo cuenta, y la ejecución del hilo cuentaReves, finalizando así la ejecución del main. No obstante, este método no retornará hasta que hayan finalizado los hilos hijo; esto es, el hilo primario NO TERMINA MIENTRAS NO TERMINEN SUS HILOS HIJO

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s