Advertisement
Akalaman

PizzeriaLC

Aug 29th, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.92 KB | None | 0 0
  1. package pizzeriaGiugno;
  2.  
  3. import java.util.Random;
  4. import java.util.concurrent.locks.*;
  5.  
  6. public class PizzeriaLC extends Pizzeria{
  7.     int numClienti;
  8.     Lock tavolo;
  9.     Condition possoSedermi;
  10.     Lock pizza;
  11.     boolean pronta;
  12.     Condition preparare;
  13.     boolean siedi;
  14.     Condition mangia;
  15.     Random r;
  16.     public PizzeriaLC() {
  17.         this.numClienti=0;
  18.         this.tavolo=new ReentrantLock();
  19.         this.possoSedermi=tavolo.newCondition();
  20.         this.pizza=new ReentrantLock();
  21.         this.mangia=pizza.newCondition();
  22.         this.preparare=pizza.newCondition();
  23.         this.pronta=false;
  24.         this.siedi=true;
  25.         this.r=new Random();
  26.     }
  27.     @Override
  28.     void mangiaPizza() throws InterruptedException {
  29.         pizza.lock();
  30.         preparare.signalAll();
  31.         try {
  32.             while(!pronta)
  33.                 mangia.await();
  34.             Thread.sleep(r.nextInt(10)+1);
  35.         }finally {
  36.             pizza.unlock();
  37.             pizzaMangiata();
  38.         }
  39.     }
  40.  
  41.     @Override
  42.     void pizzaMangiata() throws InterruptedException {
  43.         tavolo.lock();
  44.         try {
  45.         System.out.println("GNAM!");
  46.         this.numClienti--;
  47.         System.out.println("Numero Clienti: " + this.numClienti);
  48.         }finally {
  49.             if(numClienti==0) {
  50.                 pronta=false;
  51.                 siedi=true;
  52.                 possoSedermi.signalAll();
  53.             }
  54.             tavolo.unlock();
  55.         }
  56.     }
  57.  
  58.     @Override
  59.     void preparaPizza() throws InterruptedException {
  60.         pizza.lock();
  61.         try {
  62.             while(numClienti<5||pronta)
  63.                 preparare.await();
  64.             Thread.sleep(5);
  65.         }finally {
  66.             pizza.unlock();
  67.             pizzaPronta();
  68.         }
  69.     }
  70.  
  71.     @Override
  72.     void pizzaPronta() throws InterruptedException {
  73.         pizza.lock();
  74.         try {
  75.             System.out.println("PRONTA!");
  76.             pronta=true;
  77.         }finally {
  78.             mangia.signalAll();
  79.             pizza.unlock();
  80.         }
  81.     }
  82.  
  83.     void siediti() throws InterruptedException{
  84.         tavolo.lock();
  85.         try {
  86.             while(!siedi)
  87.                 possoSedermi.await();
  88.             numClienti++;
  89.             System.out.println("Numero Clienti: " + this.numClienti);
  90.             if(numClienti==5) {
  91.                 siedi=false;
  92.             }
  93.         }finally {
  94.             tavolo.unlock();
  95.             mangiaPizza();
  96.         }
  97.     }
  98.  
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement