Un Hilo o Thread es un flujo de ejecución dentro de un proceso (un programa ejecutándose 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. Estamos más familiarizados con el término multitarea, el cual describe un escenario muy similar al multiproceso.
Ciclo de vida de un hilo
Un thread puede presentar cuatro estados
- Nuevo (New): El thread ha sido creado, pero no se ha ejecutado todavía el método start(), por lo que todavía no se ha lanzado.
- Ejecutable (Runnable): El thread se está ejecutándose, pero esto no quiere decir que se esté ejecutándose en todo momento, pues ese thread tiene que repartirse el tiempo de CPU con los demás threads que sean tambien Runnable.
- Muerto (Dead): Cuando el thread ya acabó con su función, es decir el método run() ha finalizado, o cuando el programa principal termina, u otro caso, como un error que provoque el paro total del thread.
- Bloqueado (Blocked o Not Runnable): El thread podría estar ejecutándose, pero hay algo que se lo impide, como por ejemplo un operación de E/S. Mientras un thread esté en este estado, no se le asigna tiempo de CPU. También cuando se llama a los métodos sleep(long) y wait([long]).
Clase que permite crear hilos
La forma más directa para hacer un programa multihilo es extender la clase Thread, y redefinir el método run(). Este método es invocado cuando se inicia el hilo (mediante una llamada al método start() de la clase Thread). El hilo se inicia con la llamada al método run() y termina cuando termina éste.
public class ThreadEjemplo extends Thread
{
…
}
Interface que permite crear hilos
La interface Runnable proporciona un método alternativo a la utilización de la clase Thread, para los casos en los que no es posible hacer que la clase definida extienda la clase Thread. Esto ocurre cuando dicha clase, que se desea ejecutar en un hilo independiente deba extender alguna otra clase. Dado que no existe herencia múltiple, la citada clase no puede extender a la vez la clase Thread y otra más. En este caso, la clase debe implantar la interface Runnable, variando ligeramente la forma en que se crean e inician los nuevos hilos.
No hay comentarios:
Publicar un comentario