| La fábula de la tortuga y la liebre |
| Forma 2: Operativa |
Este es el Diagrama de Clases de diseño que muestra la segunda forma de utilizar los hilos en Java

Para esta segunda forma de utilizar los hilos hacemos una copia de las Clases Corredor1 y FabulaApli1 y las renombramos como Corredor2 y FabulaApli2. Para ello nos podemos ayudar del Apéndice - Copiar una Clase
Ahora nos creamos una pequeña aplicación que instancie dos corredores (laTortuga y laLiebre) que compitan conjuntamente con el hilo principal
- lo único que varía con respecto al al Forma 1 es la locaclización de la invocación del método start() parar arrancar el hilo
- este método ahora se encuentra en el constructor de la Clase Corredor2
- el hecho de que se pueda invocar al método start() desde el Constructor o desde cualquier otro método de la Clase servidora hace que los desarrolladores de la Clase cliente no se tengan que ocupar de los detalles de creación y arranque del Thread porque éste código está encapsulado en la Clase servidora que hereada de la Clase Thread.
- si el método start() es invocado desde un método en vez de desde el constructor, conseguimos que una instancia de una Clase pueda ejecutarse normalmente con llamdas síncronas a sus métodos, pero nos podría interesar que por ejemplo un método en concreto invocara al método start() y así de esta forma el método run() sería llamado de forma asíncrona y así conseguiríamos que la aplicación principal siguiera su flujo habitual y la llamada al método que contiene la invocación al método start() crearía un subhilo paralelo al hilo principal.
Para ello te puedes ayudar del siguiente fragmento de código Java
public Corredor2(String nombre) {
this.nombre = nombre;
start();
}
|
este es el código correspondiente al Constructor de FabulaApli2, en el que podemos observar que la Clase cliente trata a la Clase servidora como si de un Objeto normal se tratara.
public FabulaApli2() {
Corredor2 laTortuga = new Corredor2("T");
Corredor2 laLiebre = new Corredor2("L");
// laTortuga.start();
// laLiebre.start();
for (int i = 0; i < 2000; i++){
System.out.print("O");
}
System.out.println("\n O ha llegado.");
}
|
si quisiéramos interactuar con los Thread de las instancias laTortuga o laLiebre simplemente tendríamos que añadir el siguiente código
public FabulaApli2() {
Corredor2 laTortuga = new Corredor2("T");
laTortuga.setPriority(5);
Corredor2 laLiebre = new Corredor2("L");
laLiebre.setPriority(5);
for (int i = 0; i < 2000; i++){
System.out.print("O");
}
System.out.println("\n O ha llegado.");
}
|