You are on page 1of 13

Modulo VI

HILOS THREAD

Hilos (thread)
Una thread es un nico flujo de control dentro de un programa. Puede haber varios hilos en ejecucin simultnea. La finalizacin depende del hilo (Thread.suspend, stop estn

depreciados) Sin embargo, toda thread en un programa an comparte muchos recursos, tales como espacio de memoria y archivos abiertos. Threads tambin son llamadas procesos livianos (lightweight process).

Ciclo de vida de los hilos (Thread)

Mtodos de la clase Thread


Mtodo Descripcin

activeCount
checkAccess currentThread destroy getName getPriority getThreadGroup interrupt isAlive join isInterrupted run

Investiga el nmero de hilos en el grupo activo


Investiga si el hilo activo un hilo. Devuelve una referencia al hilo que se est ejecutando. Produce la terminacin inmediata de un hilo. Investiga el nombre de un hilo. Investiga la prioridad de un hilo. Devuelve una referencia al grupo al que pertenece un hilo. Interrumpe la ejecucin de un hilo. Investiga si un hilo esta vivo. Mezcla dos hilos en uno. Investiga si un hilo ha sido Interrumpido. Comienza ha ejecutar el cdigo destino de un hilo

Mtodos de la clase Thread


Mtodo Descripcin

setName
setPriority sleep start toString yield

Cambia el nombre de un hilo


Permite cambiar la prioridad de ejecucin de un hilo Cesa la ejecucin de un hilo durante el tiempo especificado Inicia la ejecucin de un hilo. Es decir, se llama el mtodo run del destino Muestra los datos de un hilo Permite que el procesador ejecute otros hilos en lugar del hilo afectado

Ciclo de Vida de un Hilo


Recien creada (New thread): Luego de la invocacin a

start(), el hilo pasa al estado "corrible". Corrible (Runnable):Este estado puede subdividirse en dos: Corriendo y encolado. Bloqueada (not Runnable): Se ingresa cuando: se invoca suspend(), wait(), sleep(), el hilo espera por alguna operacin de I/O, o el hilo invoca join() de otro hilo para espera por su trmino. El hilo vuelve al estado Corrible cuando el evento por que espera ocurre. Muerta (Dead): Se llega a este estado cuando el hilo termia su ejecucin (concluye el mtodo run) o es detenida por otro hilo llamando al su mtodo stop().

Para crear un hilo debes heredar o implementar una clase de esta forma:

public class hilos extends Thread{ public void run(){ //Aqui copiamos cualquier funcin } } Public class hilos implements Runnable{ public void run(){ //Aqu copiamos cualquier funcin } }

Creacin y ejecucin de Threads

Ejemplo: el primer hilo


En este ejemplo se crea un hilo de ejecucin sobre la propia clase. Este hilo

de ejecucin continua en ejecucin hasta que finaliza el tiempo de retardo que se impone con el mtodo sleep, de tal forma que acaba antes de ejecutarse el metodo principal en el hilo inicial, que el hilo hijo creado. La sentencia:

PrimerHilo destino = new PrimerHilo();


Se crea un objeto de la propia clase del nombre destino. La sentencia:

Thread nuevoHilo = new Thread(destino, Nuevo Hilo);


Crea un nuevo hilo que esta activado mediante la sentencia:

nuevoHilo.start().

Mi primer hilo
public class PrimerHilo implements Runnable { static final short limites= 1000; private short limiteI = 0; @Override public void run() { while(limiteI ++ < limites){ System.out.print("El hilo actual es: "); System.out.println(Thread.currentThread().toString()); try{ Thread.currentThread().sleep(100); }catch(InterruptedException e){ System.out.println("Hilo hijo interrumpido"); } System.exit(1); } } }

Mi primer hilo
public static void main(String[] args) { PrimerHilo destino = new PrimerHilo(); Thread nuevoHilo = new Thread(destino, "Nuevo hilo"); nuevoHilo.start(); System.out.println("El hilo principal ha terminado"); }

Ejemplo2:
En este ejemplo se muestra como se puede parar el

nuevo hilo antes de que termine su ejecucin. Para esto se crea un nuevo hilo auxiliar con la misma referencia del que se quiere detener, se asigna a null la referencia del hilo que se quiere detener y se aplica el mtodo interrupt() al hilo auxiliar

Segundo hilo
public class segundoHilo implements Runnable{ static final short limiteS = 1000; private short limiteI = 0; public void run(){ while(limiteI++ < limiteS){ System.out.print("El hilo actual es: "); System.out.println(Thread.currentThread().toString()); try{ Thread.currentThread().sleep(100); }catch(InterruptedException e){ System.out.println("Interrumpido"); System.out.println("El hilo hijo"); } System.exit(1); } } }

Segundo hilo
public static void main(String[] args) { segundoHilo destinys = new segundoHilo(); Thread newhilo = new Thread(destinys, "Nuevo Hilo"); newhilo.start(); Thread auxhilo = newhilo; newhilo=null; auxhilo.interrupt(); System.out.println("El hilo principal "); System.out.println("ha terminado"); }

You might also like