Luis Carlos Sánchez Muñoz y Juan Sebastian Oviedo Perdomo
TallerJava
Este repositorio contiene la solución a un taller práctico diseñado para comprender el uso de hilos (threads) en Java, ejecutando tareas en paralelo y gestionando de forma segura el acceso a recursos compartidos.
Preguntas para análisis:
¿Qué diferencia existe entre paralelismo y concurrencia?
Concurrencia: Es la capacidad de gestionar y progresar en múltiples tareas al mismo tiempo (entrelazándolas). No necesariamente suceden en el mismo microsegundo, pero el sistema alterna entre ellas tan rápido que lo parece.
Paralelismo: Es la ejecución simultánea literal de múltiples tareas en el mismo instante exacto de tiempo, lo cual requiere hardware multi-núcleo (multicore). Todo paralelismo implica concurrencia, pero no toda concurrencia es paralela.
¿Qué problema ocurre cuando varios hilos acceden al mismo recurso?
Ocurre la inconsistencia de datos. Si un hilo está leyendo un dato mientras otro lo está modificando al mismo tiempo, el primer hilo puede operar con información desactualizada o corrupta, llevando a resultados impredecibles (como dejar la cuenta bancaria en negativo).
¿Qué es una condición de carrera (Race Condition)?
Es un fallo que ocurre cuando el comportamiento o resultado de un programa depende de la secuencia impredecible o el "tiempo exacto" en que se ejecutan los hilos. Básicamente, los hilos "compiten" por llegar primero al recurso, y el ganador define un resultado que no es el esperado lógicamente.
¿Por qué es importante sincronizar el acceso a recursos compartidos?
Para garantizar la integridad de los datos. La sincronización (como la palabra synchronized en Java) crea un "candado" (lock) que asegura que solo un hilo a la vez pueda acceder a la sección crítica del código. Esto bloquea a los demás hilos en la "puerta" hasta que el primero termine, evitando así las condiciones de carrera.