import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.Condition; import java.util.ArrayList; class Bord{ private ArrayList bord = new ArrayList<>(); private int antallBarista; private int antallFerdigeBaristaer = 0; private Lock bordLaas = new ReentrantLock(); private Condition tomForKaffe = bordLaas.newCondition(); public Bord(int antallBarista){ this.antallBarista = antallBarista; } public void server(String kaffe){ bordLaas.lock(); //Hvis baristaen er ferdig if(kaffe.equals("tomt")){ antallFerdigeBaristaer++; } else{ bord.add(kaffe); } //Det kommer mer kaffe tomForKaffe.signalAll(); bordLaas.unlock(); } public String hentKaffe(){ bordLaas.lock(); try{ while(bord.isEmpty()){ if(antallBarista == antallFerdigeBaristaer){ tomForKaffe.signalAll(); return "tomt"; } //Venter på tilgjengelig kaffe tomForKaffe.await(); } return bord.remove(0); } catch(InterruptedException e){ System.out.println("Ble forstyrret ved henting av kaffe :o "); } finally{ bordLaas.unlock(); } //Alt er tomt return "tomt"; } }