Escolar Documentos
Profissional Documentos
Cultura Documentos
Conceptos basicos.
Un hilo -algunas veces llamado contexto de ejecucin o proceso ligero- es un
flujo de control secuencial dentro de un programa. Un nico hilo es similar a un
programa secuencial; es decir, tiene un comienzo, una secuencia y un final, adems en
cualquier momento durante la ejecucin existe un slo punto de ejecucin. Sin embargo,
un hilo no es un programa; no puede correr por s mismo, corre dentro de un programa.
Un hilo por si mismo no nos ofrece nada nuevo. Es la habilidad de ejecutar varios hilos
dentro de un programa lo que ofrece algo nuevo y til; ya que cada uno de estos hilos
puede ejecutar tareas distintas.
El ambiente de desarrollo de Java soporta programacin con mltiples hilos por
medio de bibliotecas, el lenguaje mismo y con la ayuda del sistema de tiempo de
ejecucin. A continuacin se listan las caractersticas ms importantes con las que cuenta
Java para soportar el uso de hilos.
El mtodo run
Antes que nada, necesitamos proveer a cada hilo con un mtodo run para indicarle qu
debe hacer. El cdigo de este mtodo implementa el comportamiento en ejecucin del
hilo y puede hacer, prcticamente cualquier cosa capaz de ser codificada en Java.
Existen dos tcnicas para proveer un mtodo run para un hilo:
Haciendo una subclase de Thread y sobrecargando run
Por convencin para seleccionar cual tcnica vamos a usar seguiremos la siguiente regla:
``Si las clases que elaboras deben ser subclases de otras clases (un caso comn es Applet),
entonces debe usarse Runnable.''
Una vez que el hilo hace algo, podemos manejar el ciclo de vida de un hilo: como crear y
arrancar un hilo, algunas cosas especiales que podemos hacer mientras se ejecuta y como
detenerlo.
Manejo de Prioridades de los hilos
La gran ventaja que ofrecen los hilos (como se puede inferir de lo anteriormente
expuesto) es que corren de manera concurrente. Conceptualmente, esto es cierto, pero en
la prctica generalmente no es posible. La mayora de las computadoras tienen un slo
procesador, por lo tanto los hilos corren uno a la vez de forma tal que proveen la ilusin
de concurrencia (esto es llamado scheduling). El sistema de ejecucin de Java soporta un
algoritmo determinstico (para el scheduler) llamado fixed priority scheduling. Este
algoritmo asigna tiempo de ejecucin a un hilo basado en su prioridad relativa a los
dems hilos que estn listos para ejecutarse.
Cuando se crea un nuevo hilo, hereda su prioridad del hilo que lo crea, sta puede ser
modificada con el mtodo setPriority. Las prioridades son enteros entre
activarlos,
detenerlos, etc.
todo con una sola invocacin a los mtodos respectivos.
Creacin de un hilo.
Esta es solo una forma de hacerlo heredando de Thread
classMiThreadextendsThread{
publicvoidrun(){
...
}
El ejemplo anterior crea una nueva clase MiThread que extiende la clase Thread y
sobrecarga el mtodo Thread.run() por su propia implementacion.
La otra forma es utilizando la interface Runnable
publicclassMiThreadimplementsRunnable{
Threadt;
publicvoidrun(){
//Ejecucindelthreadunavezcreado
}
}
Arranque de un Thread
Las aplicaciones ejecutan main() tras arrancar. Esta es la razn de que main() sea el lugar
natural para crear y arrancar otros threads. La lnea de cdigo:
t1=newTestTh("Thread1",(int)
(Math.random()*2000));
crea un nuevo thread. Los dos argumentos representan el nombre del thread y el tiempo
que queremos que espere antes de imprimir el mensaje.
Al tener control directo sobre los threads, tenemos que arrancarlos explcitamente. En
nuestro ejemplo con:
t1.start();
start(), en realidad es un mtodo oculto en el thread que llama al mtodo run().
Suspensin de un Thread
Un hilo puede estar en diferentes estados, por ejemplo, si un hilo esta en el estado
born (fig. 1) permanece ah hasta que se llama al mtodo start, que pone al hilo en el
estado de ready . El hilo que tenga la prioridad ms alta entra al estado de running (es
cuando el hilo comienza ha ejecutarse). El hilo entra al estado dead cuando el mtodo
run termina ya sea por que completo sus actividades o por cualquier otra razn.
Una manera comn de que un hilo entre al estado blocked es cuando un hilo
solicita entrada o salida de datos. En este caso el hilo entra al estado ready cuando la
entrada/salida se completa.
Cuando el programa llama al mtodo sleep de un hilo que esta corriendo, el hilo
entra al estado sleeping . Un hilo que se encuentra en este estado se cambia al estado
ready cuando expira el tiempo designado para dormir. Si el programa ejecuta el mtodo
interrupt de un hilo que se encuentra en el estado sleeping el hilo se sale de ese estado y
entra al estado ready.
Un hilo entra al estado dead cuando el mtodo run termina o cuando se lanza una
excepcin.
born
Notify o
nitifyAll
start
wait
sleep
wating
Termina intervalo
de dormir
Termina solicitud
entrada/salida
read
y
sleepin
g
runnin
g
Solicita entrada/salida
dead
bloked