Está en la página 1de 6

HILOS Y MULTIHILOS

Un proceso es un programa ejecutndose dentro de su propio espacio de direcciones. Java es un sistema multiproceso, esto significa que soporta varios procesos corriendo a la vez dentro de sus propios espacios de direcciones. Un hilo es una secuencia de cdigo en ejecucin dentro del contexto de un proceso.

Los hilos no pueden ejecutarse ellos solos; requieren la supervisin de un proceso padre para correr. Dentro de cada proceso hay varios hilos ejecutndose. Por ejemplo, Word puede tener un hilo en background chequeando automticamente la gramtica de lo que estoy escribiendo, mientras otro hilo puede estar salvando automticamente los cambios del documento en el que estoy trabajando.
Los hilos a menudo son conocidos o llamados procesos ligeros. Un hilo, en efecto, es muy similar a un proceso pero con la diferencia de que un hilo siempre corre dentro del contexto de otro programa. 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.

ESTADOS DE UN HILO
Igual que los procesos un solo hilo de control, los hilos pueden encontrarse en uno de los siguiente estados: Nuevo. El hilo ha sido creado pero an no ha sido activado. Cuando se active
pasar al estado preparado.

Preparado. El hilo est activo y est a la espera de que le sea asignada la UCP. En ejecucin. El hilo est activo y le ha sido asignada la UCP (slo los hilos activos, preparados, pueden ser ejecutados). Bloqueado. El hilo espera que otro elimine el bloqueo. Un hilo bloqueado puede estar: Dormido. El hilo est bloqueado durante una cantidad de tiempo determinada (por ejemplo, tres segundos), despus de la cual despertar y pasar al estado preparado.
Esperando. El hilo est esperando a que ocurra alguna cosa: una condicin, una operacin de E/S o adquirir la propiedad de un objeto de sincronismo. Cuando ocurra, pasar al estado preparado.

Muerto. El hilo ha finalizado (est muerto) pero todava no ha sido recogido por su padre. Los hilos muertos no pueden alcanzar ningn otro estado. No se puede transitar al estado nuevo ni desde el estado muerto. La transicin entre estados est controlada por el planificador: parte del ncleo del sistema operativo encargada de que todos los hilos que esperan ejecutarse tengan su oportunidad. Si un hilo en ejecucin no puede continuar, pasar al estado bloqueado; o tambin, si puede continuar y el planificador decide que ya ha sido ejecutado el tiempo suficiente, pasar a preparado cuando se d el evento por el que espera; por ejemplo, puede estar esperando a que otro hilo elimine el bloqueo, o bien si est dormido, esperar a que pase el tiempo por el que fue enviado a este estado para ser activado; y si est preparado, pasar a ejecucin cuando el planificador lo decida porque los dems hilos ya han tenido su parte de tiempo de UCP.

CUANDO SE DEBE CREAR UN HILO?


Cada vez que se crea un proceso, el sistema operativo crea un hilo primario. Para muchos procesos ste es el nico hilo necesario. Sin embargo, un proceso puede crear otros hilos para ayudarse en su trabajo, utilizando al mximo la UCP al mximo posible. Por ejemplo, supongamos el diseo de una aplicacin procesador de texto. Seria acertado crear un hilo separado para manipular cualquier tarea de impresin? Esto permitira al usuario continuar utilizando la aplicacin mientras se est imprimiendo el documento. En cambio, Qu suceder si los datos del documento cambian mientras se imprime? ste es un problema que habra que resolver, quizs creando un fichero temporal que contenga los datos a imprimir.

PROGRAMAR CON HILOS


La mayora del soporte que Java proporciona para trabajar con hilos reside en la clase Thread del paquete java.lang, aunque tambin la clase Object, la interfaz Runnable, la interfaz Thread.UncaughtExceptionHandler y las clases ThreadGroup y Threadlocal del mismo paquete, as como la maquina virtual, proporciona algn tipo de soporte.