Skip to content

Nonit0/Taller-Hilos

Repository files navigation

Taller Mecánico de Coches con Hilos (Java)

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.


🔹 Estructura del proyecto

Paquete destornilladores

  • 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.

Paquete tallerCoches

  • 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.).

🔹 Funcionamiento

  1. 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.
  2. 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).
    • Cuando no quedan más coches por generar y la cola se vacía, los mecánicos finalizan.
  3. Control de recursos:

    • El taller funciona como recurso thread-safe, usando synchronized, wait() y notifyAll().
    • El carrito de destornilladores también está sincronizado para que los mecánicos compartan los destornilladores de manera segura.

🔹 Ejecución

  1. Clonar repositorio:
git clone https://github.com/usuario/TallerCoches.git
cd TallerCoches
  1. Compilar todo el proyecto:
javac destornilladores/*.java tallerCoches/*.java
  1. Ejecutar simulación: Para iniciar con el número por defecto de coches y destornilladores:
java tallerCoches.MainTallerCoches

Para especificar número de coches o destornilladores:

java tallerCoches.MainTallerCoches 25
java destornilladores.TallerMecanicoDestornilladores 4

El primer argumento en MainTallerCoches indica el total de coches a generar, mientras que en TallerMecanicoDestornilladores indica el número de destornilladores disponibles.

🔹 Salida esperada

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: 1

Mensajes 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-0001

Mensajes 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.

🔹 Características principales

  • 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.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages