edutecnica

Esercizio 2                     

Simulare il processo di attesa di un cliente di una pizzeria che ordinata una pizza deve aspettare un tempo di preparazione di 5 secondi prima di mangiarla.


Il problema è in completa analogia con quello del processo dormiente che deve essere svegliato dopo un tempo prefissato.

class pizza{
public static void main(String[] args) {
pizzaiolo p = new pizzaiolo();
Cliente c = new Cliente(p,5000);
c.setPriority(Thread.MAX_PRIORITY);
c.start();
synchronized (p) {
   p.cuoco();
   System.out.println("(proprietario): mangia!");
}//fine synchronized
}//fine main
}//fine classe
class pizzaiolo {//monitor
private int tempo;
synchronized void cottura(int quanto){
   tempo = quanto;
   System.out.println("(pizzaiolo): è pronta fra: " + tempo/1000 + "    secondi");
   try { wait();} catch(InterruptedException e) {e.printStackTrace();}
} //fine synchronized
synchronized void cuoco() {
   try { Thread.sleep(tempo);
   }catch(InterruptedException e) {e.printStackTrace();}
   notifyAll();
   System.out.println("(pizzaiolo): è pronta!");
} //fine synchronized
} //fine classe pizzaiolo
class Cliente extends Thread {
pizzaiolo s;
int attesa;
Cliente(pizzaiolo s, int attesa ) {
this.s = s;
this.attesa = attesa;
} //fine costruttore
public void run() {
   s.cottura(attesa);
   System.out.println("(cliente):gnam gnam....");
}//fine run
}//fine classe cliente

L'output dovrebbe apparire nel seguente modo:
(pizzaiolo): è pronta fra: 5 secondi
(pizzaiolo): è pronta!
(proprietario): mangia!
(cliente):gnam gnam....