Gamarod JavaScript - Rutinas JavaScript Efectos javascript Codigos javascript Rutinas JavaScript

Programacion




Todo sobre Java - Ciclo de vida de un Thread

Ciclo de vida de un Thread





En este articulo se detalla en ciclo de vida de un thread tomando como base que se tiene algún concepto relativo a los hilos de ejecución en Java.Los threads o hilos de ejecución representan un proceso dentro de la máquina virtual Java. Con el nacimiento de la informática, surgió rápidamente la necesidad de que una máquina que había costado una gran cantidad de dinero realizase varias tareas simultáneamente. Para que las tareas no resultasen secuenciales y pudiesen ejecutar acciones en paralelo se creó el concepto de proceso, de manera que como generalmente tendremos menos microprocesadores que tareas en una máquina, un proceso es equiparable a una tarea y el procesador es compartido por dichos procesos. ara que al usuario le dé sensación de simultaneidad en la ejecución de tareas paralelas, el microprocesador cambia rápidamente de un proceso a otro de manera que no es perceptible para el usuario, es decir, va sacando un poco trabajo adelante de cada proceso y cambia muy rápido de manera que da la impresión de que hace todas esas tareas a la vez. Además, se de la circunstancia de que hay determinadas acciones a la hora de realizar una tarea que son muchísimo más lentas que el procesador (del orden de varios miles de veces más lentas, como el acceder a un dispositivo de entrada/salida, etc), con lo que siempre que hay que hacer una de estas lentas operaciones el procesador cambia de proceso.

En este artículo no vamos a centrarnos en tratar de explicar que es un thread aunque hemos hecho una ligera introducción, sino que nos centraremos en describir su ciclo de vida y en cuáles son los métodos que tiene esta clase para la gestión de dicho ciclo. En la figura 1 tenemos un descriptivo en el que apoyaremos nuestra explicación.

Figura1.

Por motivos de claridad y exactitud a partir de ahora al proceso o thread le llamaremos hilo de ejecución.

Un hilo, cuando se crea, pasa al estado de creado. Cuando llamamos al método start() del hilo,este pasa al estado "listo". Cuando el sistema encuentra el hilo que posee mayor prioridad hace que éste pase al estado "ejecutando" asignándole el procesador. Una vez que se está ejecutando al hilo le pueden suceder 6 cosas:

  1. La primera es que el hilo solicite una operación de entrada/salida(E/S). Si es así, como esta operación es muy lenta en comparación con la velocidad del microprocesador, este hilo pasará al estado de "bloqueado", de donde saldrá cuando sea finalizada esa operación E/S pasando al estado "listo".
  2. Puede que el hilo ejecute el método sleep. Con la ejecución de este método el hilo pasa al estado "dormido" de donde saldrá cuando finalice el tiempo que se ha especificado que debe permanecer en este estado (el método sleep lleva como parámetro el número de milisegundos que el hilo ha de estar dormido).Una vez finalizado dicho tiempo pasará al estado de "listo".
  3. Si se ejecuta el método suspend(). Este método hará que el hilo entre en el estado de "suspendido", y a diferencia del estado de dormido", no saldrá de ahí en un tiempo estipulado, sino que sólo lo hará cuando se llame al método resume() del hilo, que hará que éste vuelva al estado de "listo".
  4. Si se invoca al método wait(). Este método hará que el hilo pase al estado "en espera".Este estado se da cuando se requiere el uso de un objeto por parte del hilo de ejecución y éste organiza una cola para que sólo pueda ser utilizado por el número de hilos que la lógica de programación de este objeto permita. Se usa mucho para crear zonas de 'semáforos' en las que sólo un número de hilos concretos pueda entrar simultáneamente (programación concurrente).El hilo dejará la cola cuando se llame al método notify y pasará al estado de listo. Si se llama al método notifyAll() el objeto pasara al estado de listo todos los hilos que tiene en la cola del estado de "en espera".
  5. Llamamos al método stop(). Si hacemos esto el hilo pasará al estado de terminado con lo que habrá finalizado su ciclo de vida. Es la muerte de un hilo. A este estado también se puede pasar cuando el hilo ejecute todas las sentencias que tiene programadas, con lo que habrá finalizado su labor o tarea encomendada y por lo tanto habrá llegado el momento de terminar su ciclo de vida.
  6. La última es que el hilo ejecute un conjunto de sentencias y que no se produzca ningún caso de los anteriores.En este caso, si hay hilos en el estado de listo, la máquina virtual hará que el hilo deje el procesador para que lo usen otros hilos que están preparados para ello y pondrá a este hilo en el estado de listo.

Con estas descripciones hemos detallado todos los estados que puede recorrer un Hilo o Thread en su ciclo de vida. Hay que destacar como funciona la organización de las colas que se producen en los diferentes estados al encontrarse en ellos varios hilos a la vez. En primer lugar los hilos llevan un parámetro que es modificable mediante programación de prioridad. El que mayor prioridad tiene antes pasa. A igual prioridad, el primero que llegó a la cola es el primero que pasa al estado de ejecutando. Si un hilo no se ejecuta a medida que va pasando tiempo en listo la máquina virtual le va aumentando su prioridad para que gane puestos en la lista y no se produzca una situación de hambruna (un hilo tiene menos prioridad que otros y nunca llega a entrar en el procesador porque siempre habrá otro hilo de prioridad mayor esperando con él en el estado "listo"). Las colas tienen la misma organización, es decir, primero llega, antes sale, en el resto de estados.

Por ultimo detallamos cual son los métodos de la clase Thread que tienen relación directa sobre su ciclo de vida.


Método Descripción
start() Empieza la ejecución del Thread.Se invoca al método run() de dicho hilo.
stop() Finaliza la ejecución del hilo.
sleep(long milisegundos) Pone el hilo en estado de "dormido" un número de milisegundos
sleep(long milisegundos,int nanosegundos) Pone el hilo en estado de "dormido" un número de milisegundos y nanosegundos
suspend() Pone el Thread en estado de suspendido.
resume() Reanuda la ejecución de un Thread que estaba previamente en estado suspendido.
yield() Cede el control del microprocesador a otro hilo, poniéndose en la cola del estado "listo" voluntariamente.



Informe (Java) de Daniel Hernando Calleja
Webmaster de #


 
Valora este artículo   Malo Excelente  

Han valorado este artículo de Java. 17 usuario(s).
Valoración media: Ciclo

Este artículo ha sido leído ( 8684 veces ).
Fecha: 6/27/2006


Agregar comentario | (0) comentarios
trucos Java Recomendar este artículo Java
Foros sobre Java
Java
Imprimir Java
artículo Java Agregar a Favoritos este artículo Java


Java
Artículos Relacionados

• Comenzando a programar en Java

• Como conectar Java y Access

• Generar un archivo ejecutable con Java

• Java Server Pages

• Traducir nombres de host a direcciones de Internet en java

• Crear un applet java para reproducir sonidos

• Crear un applet java para mostrar una serie de imagenes

• Un Applet java para utilizar fuentes

• Determinar el nombre del host donde se ejecuta el applet java

• Una calculadora en Java