Professional Documents
Culture Documents
pepe.start();
pepe.join();
jorge.start();
jorge.join();
}
El metodo join() que llamamos al final hace que el programa principal espere hasta que
este Thread este muerto(finalize su ejecucion). Este mtodo puede disparar la excepcin
InterruptedException, por lo que lo hemos tenido en cuenta en el encabezamiento del
mtodo.
En nuestro ejemplo, simplemente a cada instancia de Alumno() que creamos la hemos
ligado a un Thread y puesto a andar. Corren todas en paralelo hasta que mueren de muerte
natural, y tambin el programa principal termina.
A continuacin se muestra la clase Alumno:
class Alumno implements Runnable{
String mensaje;
public Alumno(String nombre){
mensaje = Hola, soy + nombre + y este es mi mensaje numero: ;
}
public void run(){
for (int i=1; i<6;i++){
String msj = mensaje + i;
System.out.println(msj);
}
}
La salida ser ms o menos as:
Hola, soy Juan y este es mi mensaje numero 1
Hola, soy Juan y este es mi mensaje numero 2
Hola, soy Juan y este es mi mensaje numero 3
Hola, soy Juan y este es mi mensaje numero 4
Hola, soy Juan y este es mi mensaje numero 5
.etc.
El mtodo yield()
El mtodo yield() tiene la funcin de hacer que un hilo que se est ejecutando de regreso al
estado en listo para ejecutar para permitir que otros hilos de la misma prioridad puedan
ejecutarse. Sin embargo, el funcionamiento de este mtodo (al igual que de los hilos en
general) no est garantizado, puede que despus de que se establezca un hilo por medio del
mtodo yield() a su estado listo para ejecutar, ste vuelva a ser elegido para ejecutarse. El
mtodo yield() nunca causar que un hilo pase a estado de espera/bloqueado/dormido,
simplemente pasa de ejecutndose(running) a listo para ejecutar.
A continuacin tomando el ejemplo anterior solo haremos una modificacin en el mtodo
run, vemos como se implementa dicho metodo:
public void run(){
for (int i=1; i<6; i++){
String msj = mensaje + i;
System.out.println(msj);
Thread.yield();
}
}
En este ejemplo la salida ser ms o menos as:
Hola, soy Juan y este es mi mensaje 1
Hola, soy Luis y este es mi mensaje 1
Hola, soy Nora y este es mi mensaje 1
Hola, soy Juan y este es mi mensaje 2
Hola, soy Luis y este es mi mensaje 2
Hola, soy Nora y este es mi mensaje 2
Hola, soy Juan y este es mi mensaje 3
Hola, soy Luis y este es mi mensaje 3
etc.
El mtodo sleep()
El mtodo sleep() simplemente le dice al Thread que duerma durante los milisegundos
especficos. Se debera utilizar sleep() cuando se pretenda retrasar la ejecucin del Thread,
sleep() no consume recursos del sistema mientras el Thread duerme. De esta forma otros
Threads seguir funcionando.
objThread.sleep(1000) //Duerme al hilo objThread 1 seg
El mtodo currentThread()
Para saber qu hilo se encuentra en ejecucin en un momento determinado, existe el
mtodo esttico Thread.currentThread().
Thread.currentThread().getName() te devuelve un valor de tipo cadena con el nombre del
hilo en ejecucin, si no has definido un nombre con el mtodo setName(), de igual manera
el proceso lo tendr, algo muy parecido a Thread-0, Thread-1, etc.