public class Camino extends Thread { public Camino(String str) { super(str); } public void run() { for (int i = 0; i < 10; i++) { System.out.println("Km " + i + " : " + getName()); try { sleep((long)(Math.random() * 2500)); } catch (InterruptedException e) {} } System.out.println("Llego a la meta! " + getName()); } } |
Primeramente se define la Clase principal, la cual hereda ("inherit") su comportamiento de java.lang.Thread
, lo anterior nos otorga acceso a los métodos definidos en esta última Clase.
Posteriormente se define un constructor que toma como argumento un "String", esto permitirá nombrar el respectivo "Thread", ya que al llamar super(str)
se esta invocando el constructor de la Clase Base heredada, en este caso Thread
.
El método run()
es el corazón de cualquier "Thread" y contiene las tareas de ejecución, en este caso se esta reimplementando ("Overriding") dicho método con la siguiente lógica: Se inicia un ciclo , donde en cada iteración se imprime el nombre del "Thread" (getName
) y se "duerme" (sleep
) el mismo "Thread" por un determinado tiempo, una vez terminado el ciclo se imprime otro mensaje a pantalla
A continuación se describe otra Clase que ejecuta la lógica de esta Clase diseñada con "Threads".
public class Competidores { public static void main (String[] args) { new Camino("Conejo").start(); new Camino("Tortuga").start(); new Camino("Zorro").start(); } } |
Definida la Clase y su método principal (main()
), se inicializan tres instancias de las Clase Camino
diseñada anteriormente.
A través del método start()
declarado en cada instancia, se esta inicializando el "Thread" (Camino
) en sí; el método start()
corresponde a la Clase java.lang.Thread
al igual que run()
Al ejecutar la Clase anterior (Competidores
) se estarían ejecutando tres "Threads" simultáneamente, inclusive por los resultados de ejecución podrá notar que el acceso se lleva acabo de esta manera.
Otro detalle interesante al ejecutar esta Clase es que los resultados siempre son distintos, esto se debe a que los "Threads" se ejecutan conforme existen recursos del Sistema disponibles, sin embargo, vale mencionar que existen mecanismos más avanzados para manejo de "Threads" que permiten asignar prioridades o interrumpir "Threads" en determinado momento.