RA2 · verificado

RA2 de Programación de Servicios y Procesos · DAM

Desarrolla aplicaciones compuestas por varios hilos de ejecución analizando y aplicando librerías específicas del lenguaje de programación.

Comprobar mi dominio con José →

Contenido verificado asociado a este RA

Introducción a la Concurrencia y Fundamentos de Hilos

Esta unidad explora la necesidad de la programación concurrente, diferenciando procesos de hilos. Se cubren los conceptos básicos para identificar cuándo y por qué utilizar hilos, así como los mecanismos fundamentales para su creación, inicio y finalización.

Programación de Aplicaciones con Varios Hilos en Java

Esta unidad se centra en programar aplicaciones Java formadas por varios hilos de ejecución que trabajan de forma concurrente. Se retoman las técnicas de creación de hilos (extends Thread, implements Runnable) para construir un programa completo con varias tareas independientes, se muestra cómo iniciarlas y coordinarlas con join(), y se introduce ExecutorService como alternativa profesional. Como apoyo para entender el comportamiento del programa, se repasan brevemente los estados por los que pasa un hilo durante su ejecución.

Compartición de Información y Sincronización de Hilos

Esta unidad aborda los desafíos de la compartición de datos entre hilos y la necesidad de sincronización. Se explican los problemas de concurrencia como las condiciones de carrera y se presentan mecanismos para compartir información de forma segura y sincronizar la ejecución de hilos.

Prioridades, Pools de Hilos y Depuración de Aplicaciones Concurrentes

Esta unidad cubre la gestión de prioridades de hilos, el uso de pools de hilos para optimizar recursos y las técnicas esenciales para depurar y documentar aplicaciones concurrentes, asegurando su robustez y mantenibilidad.

Conceptos clave

ConcurrenciaParalelismoProcesoHilo (Thread)Método run()Método start()Interfaz RunnableClase ThreadRunnable vs Thread en una aplicación multihiloConcurrencia de tareas independientesThread.start() y Thread.join()ExecutorService y pools de hilosEstados del hilo como apoyo conceptualInterruptedException y terminación ordenadaVariables compartidasCondición de carreraSección críticaSincronización

Errores que conviene evitar

  • **Llamar a `run()` en lugar de `start()`:** Causa que el código de la tarea se ejecute en el hilo principal en lugar de en un nuevo hilo, anulando el propósito de la concurrencia. **Corrección:** Siempre usar `start()` para iniciar un nuevo hilo de ejecución.
  • **Confundir proceso con hilo:** Lleva a malentendidos sobre la compartición de recursos y la comunicación. **Corrección:** Recordar que los hilos comparten memoria dentro de un proceso, mientras que los procesos tienen memoria aislada.
  • **Confundir invocar run() con start():** llamar directamente a run() ejecuta el código en el mismo hilo, sin crear concurrencia real. Corrección: siempre usar start() para que el hilo se ejecute de forma independiente.
  • **No usar join() cuando el resultado de un hilo es necesario después:** el hilo principal puede continuar antes de que la tarea concurrente haya terminado, produciendo resultados incompletos. Corrección: llamar a join() sobre cada hilo cuyo resultado sea necesario antes de continuar.
  • **Ignorar InterruptedException:** capturarla sin restablecer la bandera de interrupción impide que el hilo termine de forma controlada. Corrección: llamar a Thread.currentThread().interrupt() y salir del método run() o de la tarea.
  • **No sincronizar el acceso a datos compartidos:** Causa condiciones de carrera y datos inconsistentes. **Corrección:** Identificar todas las variables compartidas y proteger su acceso con `synchronized` o `Lock`.
  • **Deadlock por orden de bloqueos:** Dos hilos intentan adquirir dos bloqueos en órdenes opuestos. **Corrección:** Establecer un orden global para la adquisición de bloqueos y seguirlo consistentemente en todos los hilos.
  • **Llamar a `wait()`, `notify()` o `notifyAll()` fuera de un bloque `synchronized`:** Lanza `IllegalMonitorStateException`. **Corrección:** Asegurarse de que estas llamadas se realicen siempre dentro de un bloque o método `synchronized` sobre el objeto cuyo bloqueo se está utilizando.

Qué se evalúa en este RA

CE a

Se han identificado situaciones en las que resulte útil la utilización de varios hilos en un programa.

CE b

Se han reconocido los mecanismos para crear, iniciar y finalizar hilos.

CE c

Se han programado aplicaciones que implementen varios hilos.

CE d

Se han identificado los posibles estados de ejecución de un hilo y programado aplicaciones que los gestionen.

CE e

Se han utilizado mecanismos para compartir información entre varios hilos de un mismo proceso.

CE f

Se han desarrollado programas formados por varios hilos sincronizados mediante técnicas específicas.

CE g

Se ha establecido y controlado la prioridad de cada uno de los hilos de ejecución.

CE h

Se han depurado y documentado los programas desarrollados.

Canal Estudios es un servicio de Skillback S.L. · NIF B2481724 · Barcelona, España
Aviso legal · Privacidad · Cookies · Términos · Atles de Catalunya