Ejercicios¶
Proyecto SynchronizedMethod
Realiza un proyecto Java haciendo uso de hilos (Runnables) y haciendo uso de los métodos sincronizados, en el que se quiere calcular las veces que las caras de un dado son lanzadas al azar. Ten en cuenta que un dado puede ser lanzado un máximo de 10.000 veces por hilo, crea un programa en Java en el que se cree 3 hilos que lancen dados, almacenando el número de veces que se obtiene cada una de las caras de un dado (1-6).
Además, deberás mostrar:
- El resultado obtenido por cada vez que se lanza el dado, mostrando también desde que hilo ha sido lanzado.
- El resultado total de cada una de las caras del dado.
- El número total de tiradas en todos los hilos.
Proyecto SynchronizedStatement
Realiza un proyecto en Java con las mismas condiciones que el anterior, pero teniendo en haciendo uso de los bloques sincronizados.
Proyecto WaitNotify
En una fiesta de cumpleaños de Julian, tres amigos le han preparado una fiesta sorpresa, Lucía, Marcos y Andrea. Tras cenar, han decidido hacer una cadena humana para limpiar los platos de la mesa (en total 10 platos sucios).
Lucía se encargará de fregar los platos sucios. Cada vez que limpia un plato lo añade a la pila de platos para secar y suele tardar entre 2 y 4 segundos en fregarlos. Marcos es el encargado de secar los platos fregados y depositarlos en la pila de platos a guardar y suele tardar entre 1 y 3 segundos en secarlos. Por último lugar, Andrea se encargará de obtener los platos fregados y almacenarlos en la alacena, y suele tardar entre 1 y 2 segundos.
Solo tiene 60 segundos para limpiar los platos antes de ser interrumpidos por Julián para cantarles cumpleaños feliz.
Crea una simulación en Java, haciendo uso de los bloques o métodos sincronizados y de los métodos de espera y notificación necesarios.
Proyecto ReentrantLockCondition
Realiza la misma aplicación del ejercicio anterior pero haciendo uso de la interfaz Condition
y la clase ReentrantLock
Proyecto ReentrantReadWriteLock
Un almacén se encarga de almacenar diferentes productos. Un consultor es un encargado de un tienda que puede comprobar los stock de los productos que hay en el almacén, mientras que un Actualizador es una persona encargada de añadir los productos al almacén.
Crea una aplicación en Java haciendo uso de hilos y de la clase ReentrantReadWriteLock
en la cual permitan consultar de forma concurrente a 3 tiendas diferentes, así como poder actualizar los productos.
Ten en cuenta lo siguiente:
- La consulta del stock de un producto tarda 2 segundos en realizarse.
- Añadir un producto al almacén es una operación que dura 3 segundos.
- El actualizador se encargará de añadir productos durante un minuto, luego de éste será interrumpido.
- Las tiendas podrán consultar el número de productos que hay en stock hasta pasado veinte segundos posteriores al interrumpirse el actualizador.
Proyecto StampedLock
Realiza el proyecto anterior haciendo uso del mecanismo StampedLock
.
Proyecto Semaphore
En un Supermercado hay cuatro cajas diferentes para que los clientes puedan ir pasando por cada una de las cajas a realizar las compras pertinentes. Cada una de las cajas está identificada con un número. Cuando una caja no está disponible el cliente deberá esperar a que alguna se quede disponible. La acción de comprar de un cliente puede llegar a durar entre 1 y 4 segundos.
Se desea crear una aplicación que simule la situación en que 50 clientes entran al supermercado a realizar las compras. Mostrando cada instante del cliente, desde que entra al supermercado y realiza la comprar, hasta que la finaliza y abandona. Hay que tener en cuenta que un cliente tarda entre 1 y 3 segundos en realizar la compra. Utiliza el Semaphore
para el acceso a las cajas, y un Lock
para la comprobar su disponibilidad.