Escolar Documentos
Profissional Documentos
Cultura Documentos
Los sistemas operativos realizan en "paralelo" diversos procesos, repartiendo el tiempo de CPU segn prioridades. Java incorpora el concepto de hilo (thread) que son procesos lanzados por otro proceso, que devuelven el control sin haber terminado de ejecutarse. Los threads forman parte del paquete Java.lang y estan implementados en la clase Thread.
El lanzamiento y la ejecucin de un hilo son ms econmicos que los de un proceso (hilos --- procesos ligeros).
Programacin concurrente (threads) Julio, 2002
Julio, 2002
public Animal (double vel, String nom) { miNombre= nom; miVelocidad= vel; } public void corre(int dist) { for (int i= 0; i< dist; i++) { System.out.print (miNombre); espera(1./miVelocidad); } System.out.println ("\n" + miNombre + " ha llegado\n"); } public void espera (double segundos) { long l=System.currentTimeMillis(); while (System.currentTimeMillis()<l+1000*segundos){;} } }
http://grupos.unican.es/macc/asignaturas/javaDB
Programacin concurrente (threads) Julio, 2002
Mediante una clase que implemente la interfase Runnable; hay que definir run()
?
Hilo h = new Hilo(); h.start(); class Hilo extends Thread { ... public void run() {...} ... }
Ejec h = new Ejec (); Thread t = new Thread(h); t.start(); class Ejec implements Runnable { ... public void run() {...} ... }
PROBLEMA: En ese caso el hilo no puede heredar de ninguna otra clase. CONSTRUCTORES:
Programacin concurrente (threads)
class Hilo
extends ...
implements Runnable {
public void run() { for (int i= 0; i< dist; i++) { System.out.print (miNombre); duerme(1./miVelocidad); } System.out.println ("\n" + miNombre + " ha llegado\n"); } public void duerme (double segundos) { long l=System.currentTimeMillis(); while (System.currentTimeMillis()<l+1000*segundos){;} } public void corre(int distancia) { dist=distancia; start(); } }
Julio, 2002
Estados de un Hilo
new Thread()
run()
?
Nuevo:
Nuevo
start()
Ejecutable
run() Muerto
Ejecutable (o activo) :
laLiebre.start(); run(); el sistema le asigna regularmente un lapso de tiempo.
No Ejecutable (o bloqueado):
laLiebre.sleep(10); durante el lapso de tiempo indicado el hilo no consume recursos. laLiebre.yield(); cede su derecho de ejecucin a otro hilo
isAlive()
Permite conocer si un hilo est activo/dormido o si no ha sido creado, o ya ha muerto.
Muerto:
cuando ha terminado los procesos indicados en el mtodo run (muere automticamente).
Programacin concurrente (threads)
Julio, 2002
sleep((long) (1000/miVelocidad));
} System.out.println ("\n" + miNombre + " ha llegado\n"); } public void corre(int distancia) { dist=distancia; start(); } }
public static void sleep(long millis) throws InterruptedException Programacin concurrente (threads) Julio, 2002
Julio, 2002
InterruptedException {
No podemos "pasar" la excepcin pues sera incompatible con run() heredado de Thread.
Julio, 2002
Prioridades
Con qu prioridades trabaja Java?
yield( );
Permite a un hilo ceder su derecho de ejecucin.
Julio, 2002