Sunteți pe pagina 1din 5

Hilos en Java

A veces necesitamos que nuestro programa Java realice varias


cosas simultneamente. Otras veces nuestro programa tiene que
realizar tareas pesadas que hacen que el programa tarde mucho o
que se quede parada. Para conseguir que Java realice varias
cosas a la vez o que no se pare el programa se utilizan los hilos
(Threads).
Los hilos son conocidos o llamados procesos ligeros. Un hilo es
muy similar a un proceso pero con la diferencia de que un hilo
siempre corre cuando existen varias acciones. Por el contrario, los
procesos mantienen su propio espacio de direcciones y entorno de
operaciones. Los hilos dependen de un programa padre en lo que
se refiere a recursos de ejecucin.
Los Sistemas Operativos de hoy en da son multitarea o
multiproceso, es decir, permiten realizar varias tareas
simultneamente. Por ejemplo: se puede estar viendo el correo en
una aplicacin cliente, imprimiendo un documento y escuchando
mp3 al mismo tiempo. El concepto central para un Sistema
Operativo de estas caractersticas es el de "proceso". Para lograr
esta funcionalidad, se requiere que la Unidad Central de
Procesos (UCP o CPU) pueda alternar entre un proceso u otro en
un ciclo o tiempo corto; esto se conoce como "tiempo compartido".
En Java los hilos estn en el paquete.
java.lang.thread
Crear un Hilo

Crear un hilo en java es una tarea muy sencilla. Basta heredar de


la clase Thread y definir el mtodo run(). Luego se instancia esta
clase y se llama al mtodo start() para que arranque el hilo.
public MiHilo extends Thread
{
public void run()
{
// Aqu el cdigo pesado que tarda mucho
}
};
...
MiHilo elHilo = new MiHilo();
elHilo.start();
System.out.println("Texto");
// Se instancia el hilo con un new MiHilo() y lo arrancamos con el
elHilo.start(). El system.out que hay detrs se ejecutara
inmediatamente despus del start(), haya terminado o no el cdigo
del hilo.
Detener un hilo
Suele ser una costumbre bastante habitual que dentro del
mtodo run() haya un bucle infinito, de forma que el
mtodo run() no termina nunca. Para esto los Thread de java
tienen muchos mtodos para parar un hilo: destroy(), stop(),
suspend(), entre otros Pero si se ve observa desde el punto de
vista application programming interface (API) que utiliza un
diseo basado en objetos, seguir con el bucle infinito. Todos esos
mtodos son inseguros, estn obsoletos, desaconsejados o las
tres cosas juntas.

Para poder detener el hilo se crea un private bolean continuar que


sea igual a un true, que se cambiara a un false cuando
queramos para el hilo. Tambin se crea un metodo
elHilo.detenElHilo(); donde a continuar ser igual a un false
para cuando se ejecute el mtodo mencionado, termine con el hilo.
En el mtodo run() se crea un while para que mientras continuar
sea igual a un true, siga el bucle pero si es un false, terminara
el hilo.
En este caso, se instancia el objeto creado con el mtodo run()
para que arranque el hilo y cuando queramos terminar el hilo,
ejecutamos el mtodo elHilo.detenElHilo().
MiHilo elHilo = new MiHilo();
elHilo.start();
// Ya tenemos el hilo arrancado
...
// Ahora vamos a detenerlo
elHilo.detenElHilo();
Control de la Ejecucin de una Thread
Varios mtodos de la clase java.lang.Thread controlan la
ejecucin de una thread.
Mtodos de uso comn:
void start(): usado para iniciar el cuerpo de la thread definido por
el mtodo run().
void sleep(): pone a dormir una thread por un tiempo mnimo
especificado.
void join(): usado para esperar por el trmino de la thread sobre la
cual el mtodo es invocado, por ejemplo por trmino de mtodo
run().

void yield(): Mueve a la thread desde el estado de corriendo al


final de la cola de procesos en espera por la UCP
Ciclo de Vida de una Thread
Cada hilo, despus de su creacin y antes de su destruccin,
estar en uno de cuatro estados: Nuevo, Ejecutable, Muerto o
Bloqueado.

1. Nuevo: se ha creado el objeto hilo pero todava no se ha


arrancado, por lo que no se puede ejecutar.
2. Ejecutable: Significa que el hilo puede ponerse en ejecucin
cuando el mecanismo de reparto de tiempos de UCP tenga ciclos
disponibles para el hilo. Por consiguiente, el hilo podra estar o no
en ejecucin, pero no hay nada para evitar que sea ejecutado si el
planificador as lo dispone; no est ni muerto ni bloqueado.
3. Muerto: la forma normal de morir de un hilo es que finalice su
mtodo run(). Tambin se puede llamar a stop(), pero esto lanza
una excepcin que es una subclase de Error (lo que significa que
no hay obligacin de poner la llamada en un bloque by).
Recurdese que el lanzamiento de una excepcin debera ser un
evento especial y no parte de la ejecucin normal de un programa.

4. Bloqueado: podra ejecutarse el hilo, pero hay algo que lo evita.


Mientras un hilo est en estado bloqueado, el planificador
simplemente se lo salta y no le cede ningn tipo de UCP hasta que
el hilo no vuelva al estado ejecutable no har ninguna operacin.

S-ar putea să vă placă și