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 liste = new ArrayList<>(); private Lock bordLaas = new ReentrantLock(); private Condition ikkeTom = bordLaas.newCondition(); private int antallFerdige = 0; private int antallBarista; public Bord(int antallBarista) { this.antallBarista = antallBarista; } public void server(String kaffe) { bordLaas.lock(); try { if (kaffe.equals("Tomt")) { antallFerdige++; } else { liste.add(kaffe); } ikkeTom.signal(); } finally { bordLaas.unlock(); } } public String hentKaffe() { bordLaas.lock(); try { while (liste.isEmpty()) { if (antallBarista == antallFerdige) { ikkeTom.signalAll(); return "Tomt"; } ikkeTom.await(); } return liste.remove(0); } catch (InterruptedException e) { System.out.println("Traaden ble avbrutt"); } finally { bordLaas.unlock(); } return "Tomt"; } }