import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.Condition; import java.util.*; class Bord{ private ArrayList bord = new ArrayList<>(); private Lock bordLaas = new ReentrantLock(); private Condition ingenKaffe = bordLaas.newCondition(); private int antallFerdige = 0; private int antallBarista; public Bord(int antallBarista){ this.antallBarista = antallBarista; } //legger til alle kaffene paa bordet (kan veare uendlig mange) public void server(String kaffe){ bordLaas.lock(); //hvis baristaen er ferdig if(kaffe.equals("tomt")){ antallFerdige++; }else{ bord.add(kaffe); } ingenKaffe.signalAll(); bordLaas.unlock(); } //henter ut en kaffe, maa vente paa at det blir plassert en kaffe //hvis det er tomt maa man vente public String hentKaffe(){ bordLaas.lock(); try{ //venter while(bord.isEmpty()){ if(antallBarista == antallFerdige){ ingenKaffe.signalAll(); //signaliserer til kaffedrikker at det ikke er mere //kaffe igjen return "tomt"; } ingenKaffe.await(); } //henter ut en kaffe return bord.remove(0); } catch (InterruptedException e){ System.out.println("Ble forstyrret naar kaffe skulle hentes"); } finally { bordLaas.unlock(); } return "tomt"; } }