import java.util.ArrayList; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class Bord { Lock laas = new ReentrantLock(); Condition ikkeTom = laas.newCondition(); ArrayList baristaer = new ArrayList<>(); int antBaristaer; boolean ferdigServert = false; public Bord(int ant){ antBaristaer = ant; } //settInn metode public void serverKaffe(Barista barista, boolean ferdig){ laas.lock(); try{ //System.out.println("\nbaristaer.size i serverKaffe(): " + baristaer.size()); //System.out.println("serverer"); baristaer.add(barista); //System.out.println("lagt til"); //System.out.println("ferdig i serverKaffe(): " + ferdig); ikkeTom.signalAll(); //System.out.println("signalisert"); } finally{ laas.unlock(); } } public Barista hentKaffe() throws InterruptedException { laas.lock(); try{ //System.out.println("\nhentKaffe(), ferdigServert: " + ferdigServert); //System.out.println("baristaer.size i hentKaffe(): " + baristaer.size()); //System.out.println("antBaristaer: " + antBaristaer); while(baristaer.size() == 0 && !ferdigServert){ //System.out.println("ikketom.await"); //System.out.println("antBaristaer: " + antBaristaer); ikkeTom.await(); } if(antBaristaer == 0 || ferdigServert){ //System.out.println("return null"); return null; } if(baristaer.size() > 0){ //System.out.println("returnerer kaffe"); return baristaer.remove(0); } } finally{ laas.unlock(); } return null; } public void signaliser(){ laas.lock(); try{ //System.out.println("\nsignaliserer - signaliser()"); antBaristaer--; //System.out.println("antBaristaer i signaliser(): " + antBaristaer); if(antBaristaer == 0){ ferdigServert = true; System.out.println("\nFERDIG"); } ikkeTom.signalAll(); } finally{ laas.unlock(); } } }