Fundamentos y Creación de Hilos de Ejecución (Threads) en Java
Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones
Escrito el en
con un tamaño de 3,48 KB
Threads en Java: Conceptos Fundamentales
Los threads o hilos de ejecución son segmentos de código de un programa que se ejecutan secuencialmente de modo independiente de las otras partes del programa. La principal utilización de un thread en un programa es para el aislamiento y sincronización de tareas.
La clase Thread desciende de Object e implementa la interfaz Runnable. No es necesario importarlas a nuestro programa ya que se encuentran dentro del paquete java.lang.
Formas de Crear un Thread en Java
En Java existen dos formas principales de utilizar o crear un thread:
- Creando una clase que herede de la clase
Thready sobrecargando el métodorun(). - Implementando la interfaz
Runnabley declarando el métodorun().
Estados o Ciclo de Vida de un Thread
Un hilo de ejecución atraviesa diferentes estados durante su existencia. A continuación, se detallan los estados principales:
1. Nuevo (New)
- El thread ha sido creado, pero no se ha ejecutado todavía el método
start(), por lo que aún no se ha lanzado.
2. Ejecutable (Runnable)
- El thread se está ejecutando, pero esto no quiere decir que se esté ejecutando en todo momento, pues ese thread tiene que repartirse el tiempo de CPU con los demás threads que sean también Runnable.
3. Muerto (Dead)
- Cuando el thread ya acabó con su función, es decir, el método
run()ha finalizado. - Cuando el programa principal termina.
- Como resultado de un error que provoque el paro total del thread.
4. Bloqueado (Blocked o Not Runnable)
- El thread podría estar ejecutándose, pero hay algo que se lo impide, como por ejemplo una operación de Entrada/Salida (E/S).
- Mientras un thread esté en este estado, no se le asigna tiempo de CPU.
- También ocurre cuando se llaman a los métodos
sleep(long)ywait([long]).
Tipos de Colaboración entre Threads
Los threads pueden interactuar de diversas maneras dependiendo de la tarea que estén realizando:
Threads Independientes
- Threads completamente independientes, que realizan tareas no relacionadas. Un ejemplo es el caso de imprimir un documento.
Threads Colaborativos (Sin Interferencia)
- Threads que trabajan con una misma tarea, es decir, se ayudan entre ellos, pero sin interferir ni intercambiar relación entre ellos. Por ejemplo, threads que colaboran en el producto de dos matrices, ocupándose cada una de ellas de calcular ciertas filas de la matriz producto.
Threads con Acceso a Recursos Mutuamente Exclusivos
- Threads que utilizan recursos de modo mutuamente exclusivo, aunque sin tener que coordinar sus actividades. Esto ocurre en los threads que intentan leer o actualizar un registro en la base de datos.
Threads Coordinados
- Threads que deben coordinar sus actividades, de modo que una de ellas no puede empezar o continuar hasta que la otra haya realizado su tarea. Un ejemplo muy conocido es el problema del productor-consumidor.