PROCESO DE HILOS
Enviado por • 2 de Abril de 2013 • 1.143 Palabras (5 Páginas) • 593 Visitas
PROCESO DE HILOS
Un hilo tiene un ciclo de vida que va desde su creación hsta su terminación.
Durante su ciclo de vida cada uno de los hilos o tareas de una aplicación puede
estar en diferentes estados, algunos de los cuales se indican a continuación:
• Nacido: Cuando se acaba de crear un hilo, se dice que está nacido, y continúa en ese estado hasta que se invoca el método start() del hilo. La siguiente sentencia crea un nuevo thread pero no lo arranca, por lo tanto deja el thread en el estado de nacido.
Thread miHilo = new MiClaseThread();
Cuando un thread está en este estado, es sólo un objeto Thread vacío o nulo. No se han asignado recursos del sistema todavía para el thread. Así, cuando un thread está en este estado, lo único que se puede hacer es arrancarlo con start().
• Listo: Cuando se invoca el método start() del hilo, se dice que está en estado listo. El método se arranca con la siguiente instrucción, para el caso del hilo miHilo:
miHilo.start();
• Ejecutable: cuando el método start() se ejecuta, crea los recursos del sistema necesarios para ejecutar el thread, programa el thread para ejecutarse, y llama al método run() del thread que se ejecuta en forma secuencial. En este punto el thread está en el estado ejecutable. Se denomina así puesto que todavía no ha empezado a ejecutarse.
• En ejecución: Un hilo en estado de listo de la más alta prioridad, pasa al estado de ejecución, cuando se le asignan los recursos de un procesador, o sea cuando inicia su ejecución. Aquí el thread está en ejecución.Cada hilo tiene su prioridad, hilos con alta prioridad se ejecutan preferencialmente sobre los hilos de baja prioridad.
• No ejecutable: Un hilo continúa la ejecución de su método run(), hasta que pasa al estado de no ejecutable originado cuando ocurre alguno de los siguientes cuatro eventos:
Se invoca a su método sleep().
Se invoca a su su método suspend().
El thread utiliza su método wait() para esperar una condición variable.
El thread está bloqueado durante una solicitud de entrada/salida.
Por ejemplo, en el siguiente fragmento de codigo se pone a dormir
miHilo durante 10 segundos (10.000 milisegundos):
Thread miHilo = new MiClaseThread();
miHilo.start();
try {
miHilo.sleep(10000);
} catch (InterruptedException e){
}
Durante los 10 segundos que miHilo está dormido, incluso si el proceso se vuelve disponible, miHilo no se ejecuta. Después de 10 segundos, miHilo se convierte en "Ejecutable" de nuevo y, si el procesador está disponible se ejecuta. Para cada entrada en el estado "No Ejecutable", existe una ruta de escape distinta y específica que devuelve el thread al estado "Ejecutable". Por ejemplo, si un thread ha sido puesto a dormir dutante un cierto número de milisegundos deben pasar esos milisegundos antes de volverse "Ejecutable" de nuevo. La siguiente es una secuencia de las acciones a realizar para cada entrada en el estado "No Ejecutable":
Si se ha puesto a dormir un hilo, deben pasar el número de milisegundos especificados en sleep(). Si se ha suspendido un hilo, se debe llamar a su método resume (). Si un hilo está esperando una condición variable, siempre que el objeto propietario de la variable renuncie mediante notify() o notifyAll ().
Si un hilo está bloqueado durante la I/O, cuando se complete la I/O.
• Muerto: Un hilo pasa al estado de muerto cuando se termina su método
run(), o cuando se ha invocado su método stop(). En algún momento el sistema dispondrá entonces del hilo muerto. Un hilo puede morir de dos formas:
Muerte natural: se produce cuando su método run()sale normalmente.
Por ejemplo, el bucle while en este método es un bucle
...