Hilos en JAVA
Hilos en JAVA
Hilo
llamado.
Esperando/bloqueado/dormido
(waiting/blocked/sleeping): estado en el
En ejecución (running): Este es el estado en cual el hilo está vivo aún pero no es elegible
el que el hilo está ejecutándose ocupando para ser ejecutado.
tiempo de CPU.
Para poder bloquear un objeto e impedir que otro hilo lo utilice, se utiliza la
palabra synchronized, cuando un hilo está ejecutando, un método
sychronized en un objeto se bloquea el acceso a dicho objeto, cualquier
otro hilo que quiera ejecutar el método bloqueado, tendrá que esperar a
que se desbloque, el objeto se desbloqueara cuando el hilo actual termine
la ejecución del método synchronized, se ira creando una lista de espera y
se irán ejecutando en orden de llegada.
Librerías clases
La acción sucede dentro del método run(), el código que se encuentra dentro de este método, si queremos hacer
varias acciones de manera independiente pero todas a la vez, tendremos varias clases cada una con su método
run() pero la pila de procesos siempre comienza a partir del método run()
Java.lang.Tread: Java.lang.Runnable:
es la clase principal nos ofrece el API se trata de una interfaz, que fuerza la
genérico de los hilos así como la implementación del método “public void
implementación de su comportamiento run()” existe por falta de herencia
múltiple en java
el método run() de la clase Thread. La interfaz Runnable requiere que sólo un método sea implementado, el método run().
La tarea concurrente es desarrollada en Primero creamos una instancia de esta clase con new, luego creamos una instancia de
Thread con otra sentencia new y usamos el objeto recién creado en el constructor.
este método run(). Finalmente, llamamos el método start() de la instancia de Thread para iniciar la tarea
definida en el método run().
Ciclo de Vida de una Thread
(Threads) en Java
Recién creada (New thread): entra aquí
inmediatamente después de su creación.
Es decir luego del llamado a new. En este
estado los datos locales son ubicados e
iniciados. Métodos de uso común:
Corrible (Runnable): Aquí el contexto de void start(): usado para iniciar el cuerpo de la thread
ejecución existe y el hilo puede ocupar la definido por el método run().
CPU en cualquier momento. Este estado void sleep(): pone a dormir una thread por un tiempo
puede subdividirse en dos: Corriendo y mínimo especifivoid join(): usado para esperar por el
encolado. término de la thread sobre la cual el método es invocado,
Bloqueada (not Runnable): Se ingresa por ejemplo por término de método run().
cuando: se invoca suspend(), el hilo void yield(): Mueve a la thread desde el estado de
invoca el método wait() de algún objeto, corriendo al final de la cola de procesos en espera por la
el hilo invoca sleep(), el hilo espera por CPU.
alguna operación de I/O, o el hilo invoca
join() de otro hilo para espera por su
término.
Muerta (Dead): Se llega a este estado
cuando el hilo termina su ejecución
(concluye el método run) o es detenida
por otro hilo llamando al su método
stop(). Esta última acción no es
recomendada.
Ejemplo de hilos