Proyecto académico de Programación de Servicios y Procesos que simula el funcionamiento de una cocina con múltiples cocineros trabajando en paralelo. Implementado tanto en Java como en Python para demostrar el uso de hilos (threads) y sincronización de recursos compartidos.
Este proyecto simula una cocina donde varios cocineros procesan pedidos de forma concurrente. Los cocineros compiten por tomar pedidos de una lista compartida, los preparan (con un tiempo de espera aleatorio) y registran su trabajo en un archivo de log.
- Generación aleatoria: Entre 6-12 pedidos y 3-4 cocineros por ejecución
- Procesamiento concurrente: Múltiples hilos trabajando simultáneamente
- Sincronización: Control de acceso a recursos compartidos (lista de pedidos y archivo log)
- Registro de actividad: Log detallado de todas las operaciones
- Simulación realista: Tiempos de preparación aleatorios (1-3 segundos)
proyecto-cocina/
├── Java/
│ ├── Cocina.java # Clase principal (punto de entrada)
│ ├── Cocinero.java # Hilo que representa un cocinero
│ └── Pedido.java # Modelo de datos para pedidos
├── Python/
│ ├── Cocina.py # Módulo principal
│ ├── Cocinero.py # Clase Thread para cocineros
│ └── Pedido.py # Clase modelo de pedidos
└── README.md
Compilación:
javac Cocina.java Cocinero.java Pedido.javaEjecución:
java CocinaEjecución directa:
python Cocina.pyRequisitos: Python 3.6 o superior (sin dependencias externas)
=== APERTURA DE COCINA ===
Pedidos a preparar: 8
Cocineros disponibles: 3
Pedidos pendientes:
- Pedido #1 (Pizza Funghi)
- Pedido #2 (Ramen Tonkotsu)
- Pedido #3 (Paella Valenciana)
...
-> Chef0 está preparando el Pizza Funghi
-> Chef1 está preparando el Ramen Tonkotsu
-> Chef2 está preparando el Paella Valenciana
Completado: Chef1 terminó el Pedido #2 (Ramen Tonkotsu)
Completado: Chef0 terminó el Pedido #1 (Pizza Funghi)
...
=== TODOS LOS PEDIDOS COMPLETADOS ===
--- INICIO DEL SERVICIO ---
Total de pedidos: 8
Total de cocineros: 3
Completado: Chef1 terminó el Pedido #2 (Ramen Tonkotsu)
Completado: Chef0 terminó el Pedido #1 (Pizza Funghi)
Completado: Chef2 terminó el Pedido #3 (Paella Valenciana)
...
--- FIN DEL SERVICIO ---
- Java: Uso de
Thready herencia de la clase - Python: Uso de
threading.Threadcomo clase base
- Java:
- Bloque
synchronizedcon objeto lock compartido Collections.synchronizedList()para la lista de pedidos
- Bloque
- Python:
- Context manager
with lockpara sincronización - Lock explícito con
threading.Lock()
- Context manager
- Lista de pedidos: Acceso sincronizado para evitar condiciones de carrera
- Archivo de log: Escritura sincronizada para mantener integridad
- Consola: Salida estándar para monitoreo en tiempo real
Este proyecto demuestra:
✅ Creación y gestión de múltiples hilos
✅ Sincronización de acceso a recursos compartidos
✅ Prevención de condiciones de carrera (race conditions)
✅ Manejo de excepciones en contextos multihilo
✅ Uso de locks y bloqueos para coordinación
✅ Escritura segura en archivos desde múltiples hilos
✅ Implementación equivalente en dos lenguajes diferentes
Representa un pedido con:
id: Identificador único numériconombrePlato: Nombre del plato del menú
Cada cocinero:
- Toma un pedido de la lista compartida (con lock)
- Lo "prepara" (sleep aleatorio de 1-3 segundos)
- Registra la finalización en el log (con lock)
- Repite hasta que no quedan pedidos
Orquesta la simulación:
- Genera cantidad aleatoria de pedidos y cocineros
- Crea la lista compartida de pedidos
- Inicia todos los hilos (cocineros)
- Espera a que terminen (
join()) - Cierra el archivo de log
El simulador incluye 12 platos variados:
- Pizza Funghi
- Lasaña de Carne
- Ensalada Griega
- Sopa de Cebolla
- Tacos de Cochinita
- Risotto de Setas
- Hamburguesa con Queso
- Pollo Tikka Masala
- Ramen Tonkotsu
- Filete Mignon
- Sushi Variado
- Paella Valenciana
| Aspecto | Java | Python |
|---|---|---|
| Herencia | extends Thread |
threading.Thread |
| Lock | synchronized(lock) |
with lock: |
| Lista sincronizada | Collections.synchronizedList() |
Lock manual |
| Sleep | Thread.sleep(ms) |
time.sleep(seconds) |
| Nombres cocineros | "Chef" + i |
Lista predefinida de nombres |
| Try-with-resources | Sí (PrintWriter) | Context manager (with) |
Entornito - Alumno de 2º DAM
Asignatura: Programación de Servicios y Procesos
Proyecto académico con fines educativos.
⭐ Nota: Cada ejecución produce resultados diferentes debido a la aleatoriedad en la generación de pedidos, asignación de cocineros y tiempos de preparación.