Certamente, hai ragione :
Qui la spiegazione dell'esercizio.
Una sala, in grado di ospitare fino a 30 persone, contiene un televisore con 8 canali. La sala è frequentata daun insieme di persone che vi si recano per guardare la TV in compagnia. Ogni persona effettua
periodicamente le seguenti operazioni:
1) sceglie a caso il canale C che vuole guardare (con C compreso tra 1 e 8);
2) entra nella sala; finché la sala è piena, attende in ordine FIFO che si liberi un posto per entrare.
Dopo essere entrato nella sala:
· se nessuno sta guardando la TV, cambia il canale su C e prosegue con la visione;
· se il canale trasmesso è già uguale a C, prosegue con la visione;
· se infine il canale trasmesso è diverso da C, e qualcuno lo sta guardando, si mette in attesa fino a
quando il canale diventa uguale a C; al termine dell’attesa prosegue con la visione;
3) guarda il canale C per un tempo compreso tra 30 e 300 secondi;
4) esce dalla sala: prima di uscire, se nessuno sta più guardando il canale C, cambia il canale del
televisore in quello per cui è in attesa il maggior numero di persone.
Non si tenga conto della possibilità di starvation. Si modellino in Java le persone attraverso dei Thread e si
implementino due soluzioni che riproducano il funzionamento del problema sopra descritto utilizzando:
1. la classe Semaphore del package java.util.concurrent
2. gli strumenti di mutua esclusione e sincronizzazione del package java.util.concurrent.locks.
Si scriva infine un main d'esempio che, facendo uso di una delle due soluzioni precedenti, inizializzi 100
Il problema che mi da è che quando fa la wait il Thread, mi solleva una eccezione IllegalMonitorStateException che non riesco a risolvere