Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package pizzeriaGiugno;
- import java.util.Random;
- import java.util.concurrent.locks.*;
- public class PizzeriaLC extends Pizzeria{
- int numClienti;
- Lock tavolo;
- Condition possoSedermi;
- Lock pizza;
- boolean pronta;
- Condition preparare;
- boolean siedi;
- Condition mangia;
- Random r;
- public PizzeriaLC() {
- this.numClienti=0;
- this.tavolo=new ReentrantLock();
- this.possoSedermi=tavolo.newCondition();
- this.pizza=new ReentrantLock();
- this.mangia=pizza.newCondition();
- this.preparare=pizza.newCondition();
- this.pronta=false;
- this.siedi=true;
- this.r=new Random();
- }
- @Override
- void mangiaPizza() throws InterruptedException {
- pizza.lock();
- preparare.signalAll();
- try {
- while(!pronta)
- mangia.await();
- Thread.sleep(r.nextInt(10)+1);
- }finally {
- pizza.unlock();
- pizzaMangiata();
- }
- }
- @Override
- void pizzaMangiata() throws InterruptedException {
- tavolo.lock();
- try {
- System.out.println("GNAM!");
- this.numClienti--;
- System.out.println("Numero Clienti: " + this.numClienti);
- }finally {
- if(numClienti==0) {
- pronta=false;
- siedi=true;
- possoSedermi.signalAll();
- }
- tavolo.unlock();
- }
- }
- @Override
- void preparaPizza() throws InterruptedException {
- pizza.lock();
- try {
- while(numClienti<5||pronta)
- preparare.await();
- Thread.sleep(5);
- }finally {
- pizza.unlock();
- pizzaPronta();
- }
- }
- @Override
- void pizzaPronta() throws InterruptedException {
- pizza.lock();
- try {
- System.out.println("PRONTA!");
- pronta=true;
- }finally {
- mangia.signalAll();
- pizza.unlock();
- }
- }
- void siediti() throws InterruptedException{
- tavolo.lock();
- try {
- while(!siedi)
- possoSedermi.await();
- numClienti++;
- System.out.println("Numero Clienti: " + this.numClienti);
- if(numClienti==5) {
- siedi=false;
- }
- }finally {
- tavolo.unlock();
- mangiaPizza();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement