Está en la página 1de 6

Soluciones Simples para Problemas de Hilos en

Java

“Con gran poder, viene gran...”

Iniciemos sin demora! Hilos, ​¿qué es un hilo?

Un hilo es la ruta que se sigue al ejecutar un programa. Todos los programas


Java tienen al menos un hilo, conocido como el hilo principal, que es creado por la
Máquina Virtual de Java. Un hilo es un único flujo secuencial de control dentro de un
programa.

Un solo hilo también tiene un principio, una secuencia y un final. En cualquier


momento dado durante el tiempo de ejecución del subproceso, hay un solo punto de
ejecución. Sin embargo, un hilo en sí no es un programa; un hilo no se puede
ejecutar por sí solo. Más bien, se ejecuta dentro de un programa y aprovecha los
recursos asignados para ese programa y el entorno del programa.

La verdadera emoción que rodea a los hilos no se trata de un solo hilo


secuencial. Se trata del uso de varios subprocesos que se ejecutan al mismo tiempo
para realizar diferentes tareas, como la gestión de gran cantidad de datos u
operaciones que requieren largos tiempos de ejecución que pueden ralentizar la
aplicación y evitar una buena experiencia de usuario.

Ventajas
1. Reduce tiempo de desarrollo.
2. Mejora el desempeño de operaciones complejas.
3. Tareas paralelas.

Desventajas
1. Varios subprocesos pueden interferir entre sí al compartir recursos de
hardware.
2. Puede causar problemas de deadlocks, starvation and race si no son usados
correctamente.

Problema Deadlock.

Un problema Deadlock describe una situación en la que dos o más


subprocesos están bloqueados para siempre, esperando el uno por el otro. El
interbloqueo se produce cuando varios subprocesos necesitan el mismo objeto pero
los obtienen en un orden diferente. Veamos el código!

El código anterior nos dará una salida similar a esta:

Y eso es porque el primer hilo está usando el objet1 y esperando el objet2,


pero el segundo hilo está usando el objet2 y no lo soltará hasta que haya usado
también el objet1. Este es un caso claro de hilos bloqueados para siempre..

Solución Simple al Problema Deadlock.


Cambiar el orden de los objetos evita que el programa entre en una situación
de interbloqueo. Veamos el código!

La salida será similar a esta:

Problema Starvation.

El problema Starvation ocurre cuando a un hilo se le niega continuamente el


acceso a los recursos y, como resultado, no puede avanzar. Esto suele ocurrir
cuando los hilos codiciosos consumen recursos compartidos durante largos
períodos de tiempo. Revisemos el código!

El código anterior nos dará una salida similar a esta:

Como puedes ver, al hilo #5 se le ha negado el acceso a los recursos y,


debido a esto, el progreso realizado es mínimo.

Solución Simple al Problema Starvation.

En general, se recomienda no modificar las prioridades de los hilos, ya que


esta es la causa principal del problema Starvation. Una vez que comienzas a
modificar tu aplicación con prioridades de hilos, esta se acopla estrechamente a la
plataforma específica y también presenta el riesgo de que los hilos no tengan
acceso a recursos.
Problema Race.

El problema Race sucede cuando un subproceso va a actuar en función de


una condición de verificación, pero otro subproceso puede haber intercalado y
cambiado el valor del campo. Ahora, el primer hilo actuará basándose en un valor
que ya no es válido. Revisemos el código!

El resultado será algo similar a este:

Algunos de los hilos cambiaron el valor de ​number y otros hilos no lo


cambiaron. Esa es la razón por la que el uso ​number para una condición no es
válido en este código.
Solución Simple al Problema Race.

Una forma sencilla de corregir esto es usar sincronización. La sincronización


nos asegura que solo un hilo puede acceder al recurso en un momento dado.
Veamos el código!

En este caso, solo el primer hilo cambió el valor de number y lo mantuvo válido para
usarlo en una condición.

Conclusión

Siempre hay una solución a cada problema. Solo necesitas tomar un


momento, revisar tu código y analizarlo en contra aquello que sea tu objetivo final.
Los hilos son una herramienta poderosa que puede hacer nuestras vidas como
ingenieros súper fáciles, pero recuerda que ¡con gran poder viene una gran
responsabilidad!

También podría gustarte