Este proyecto simula un taller mecánico donde los coches llegan de manera aleatoria y son atendidos por mecánicos, utilizando hilos en Java y sincronización de recursos compartidos. Cada mecánico toma un coche de la cola de pendientes y simula su reparación.
- CarritoDestornilladores.java → Recurso compartido de destornilladores; los mecánicos lo usan para trabajar.
- Mecanico.java → Hilo que simula un mecánico usando destornilladores para atender coches.
- TallerMecanicoDestornilladores.java → Clase principal que inicia la simulación con varios mecánicos y un carrito de destornilladores.
- Coche.java → Clase POJO que representa un coche con id y matrícula.
- GeneradorCoches.java → Hilo que genera coches de manera aleatoria y los añade al taller.
- MecanicoCoche.java → Hilo que representa a un mecánico que toma coches del taller para repararlos.
- TallerCoches.java → Recurso compartido con la cola de coches pendientes; sincroniza llegada y atención de coches.
- MainTallerCoches.java → Clase principal para iniciar la simulación del taller de coches con parámetros configurables (total de coches, nombres de mecánicos, etc.).
-
Generación de coches:
- Se crean coches con ID incremental y matrícula aleatoria (formato
LLL-NNNN). - Se generan con un intervalo aleatorio (50–100 ms) entre cada coche.
- Cada coche se añade al TallerCoches notificando a los mecánicos disponibles.
- Se crean coches con ID incremental y matrícula aleatoria (formato
-
Atención de coches por mecánicos:
- Cada mecánico es un hilo independiente (
MecanicoCoche) que:- Toma coches del taller de forma sincronizada (
tomarCoche). - Si no hay coches pendientes, se bloquea hasta que llegue uno nuevo.
- Simula el tiempo de reparación (300 ms por coche).
- Toma coches del taller de forma sincronizada (
- Cuando no quedan más coches por generar y la cola se vacía, los mecánicos finalizan.
- Cada mecánico es un hilo independiente (
-
Control de recursos:
- El taller funciona como recurso thread-safe, usando
synchronized,wait()ynotifyAll(). - El carrito de destornilladores también está sincronizado para que los mecánicos compartan los destornilladores de manera segura.
- El taller funciona como recurso thread-safe, usando
- Clonar repositorio:
git clone https://github.com/usuario/TallerCoches.git
cd TallerCoches- Compilar todo el proyecto:
javac destornilladores/*.java tallerCoches/*.java- Ejecutar simulación: Para iniciar con el número por defecto de coches y destornilladores:
java tallerCoches.MainTallerCochesPara especificar número de coches o destornilladores:
java tallerCoches.MainTallerCoches 25
java destornilladores.TallerMecanicoDestornilladores 4El primer argumento en MainTallerCoches indica el total de coches a generar, mientras que en TallerMecanicoDestornilladores indica el número de destornilladores disponibles.
Mensajes de llegada de coches:
[GENERADOR] Nuevo coche creado → El Coche número: 1 con matrícula: ABC-0001
[TALLER] Llega El Coche número: 1 con matrícula: ABC-0001. Total pendientes: 1Mensajes de mecánicos trabajando:
Juan toma El Coche número: 1 con matrícula: ABC-0001. Pendientes: 0
Juan está trabajando en El Coche número: 1 con matrícula: ABC-0001
Juan ha terminado con El Coche número: 1 con matrícula: ABC-0001Mensajes de uso de destornilladores:
[Mecanico-1: Juan] -> ESPERANDO DESTORNILLADOR(disponibles=0)
[Mecanico-1: Juan] -> USANDO DESTORNILLADOR(disponibles=2)
[Mecanico-1: Juan] ha liberado el destornillador(disponibles=3)Mensaje final de la simulación:
=== Taller: todos los mecánicos han terminado ===
[GENERADOR] No se generarán más coches.- Uso de hilos para simular concurrencia.
- Thread-safe resources: Taller de coches y carrito de destornilladores.
- Generación aleatoria de coches y matrículas.
- Mecánicos y recursos compartidos sincronizados con synchronized, wait() y notifyAll().
- Totalmente configurable: número de coches, mecánicos y destornilladores.