HILO
Un hilo es un
proceso que se está ejecutando en un momento determinado en nuestro sistema
operativo, como cualquier otra tarea, esto se realiza directamente en el
procesador. Existen los llamados 'demonios' que son los procesos que define el
sistema en sí para poder funcionar y otros que llamaremos los hilos definidos
por el usuario o por el programador, estos últimos son procesos a los que el
programador define un comportamiento e inicia en un momento específico.
Existen dos
maneras de creación de un hilo:
·
Thread
La clase Thread es la clase responsable de producir hilos funcionales para otras
clases. Para
añadir la funcionalidad de hilo a una clase simplemente se
deriva la clase de Thread y se
ignora el método run. Es en este método run donde el procesamiento de un hilo toma lugar, y
a menudo se refieren a él como el cuerpo del hilo. La clase Thread también define los
métodos start y stop, los cuales te permiten comenzar y parar la ejecución del hilo,
además de un gran número de métodos útiles.
·
Runnable
Java no soporta herencia múltiple de forma directa, es decir, no
se puede derivar una clase de
varias clases padre. Esto nos plantea la duda sobre cómo podemos
añadir la funcionalidad de
Hilo
a una clase que deriva de otra clase, siendo
ésta distinta de Thread. Para lograr esto se
utiliza la interfaz Runnable. La interfaz Runnable proporciona la capacidad de añadir la
funcionalidad de un hilo a una clase simplemente implementando
la interfaz, en lugar de
derivándola de la clase Thread.
Los estados de un hilo son los siguientes;
Nuevo (new): Este es el estado en que un hilo se encuentra después de que un objeto de
la clase Thread ha sido instanciado pero antes de que el método start()
sea llamado.
- En
ejecución (runnable): Este es el estado en que un hilo puede ser elegido
para ser ejecutado por el programador de hilos pero aún no está corriendo en el
procesador. Se obtiene este estado inmediatamente después de hacer la llamada
al método start() de una instancia de la clase Thread.
- Ejecutándose
(running): Este es el estado en el que el hilo está realizando lo que debe
de hacer, es decir, está realizando el trabajo para el cual fue diseñado.
- Esperando/bloqueado/dormido
(waiting/blocked/sleeping): Es el estado en el cual el hilo está vivo aún
pero no es elegible para ser ejecutado,es decir, no está en ejecución pero
puede estarlo nuevamente si algún evento en particular sucede. Por ejemplo, un
hilo puede estar durmiendo por que en el código se le ha pedido que lo haga pero
pasa a estado en ejecución cuando el tiempo que se le pidió dormir ha expirado.
- Muerto (dead): Un hilo está muerto cuando se han completado todos
los procesos y operaciones contenidos en el método run(). Una vez
que un hilo ha muerto NO puede volver nunca a estar vivo, recordemos que
no es posible llamar al método start() más de una vez para un
solo hilo.
- Hilo Durmiendo (sleeping):
El método sleep() es un método estático de la clase Thread.
Generalmente lo usamos en el código para pausar un poco la ejecución de un
proceso en particular forzándolo a dormir durante un tiempo determinado.
