import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; class Brusautomat{ private final int kapasitet; private int antBrusbokser; private int antBrusdrikkere; private final Lock laas = new ReentrantLock(); private final Condition tom = laas.newCondition(); private final Condition ikkeTom = laas.newCondition(); public Brusautomat(int kapasitet, int Brusdrikkere){ this.kapasitet = kapasitet; this.antBrusbokser = kapasitet; this.antBrusdrikkere = antBrusdrikkere; } public void refill() throws InterruptedException{ laas.lock(); try { while (antBrusbokser > 0) { if (antBrusdrikkere == 0) return; tom.await(); } this.antBrusbokser = kapasitet; ikkeTom.signalAll(); System.out.println("Brusautomaten er fylt opp!"); } finally { laas.unlock(); } } public void kjopBrus() throws InterruptedException { laas.lock(); try { while (antBrusbokser == 0) { ikkeTom.await(); } antBrusbokser--; System.out.println("En brus ble kj?pt"); if (antBrusbokser == 0) {tom.signal();} } finally { laas.unlock(); } } public boolean finnesFlereBrusdrikkere(){ laas.lock(); try { return antBrusdrikkere > 0; } finally { laas.unlock(); } } public void ferdigAaDrikke(){ laas.lock(); try { antBrusdrikkere--; if (antBrusdrikkere == 0) {tom.signalAll();} } finally {laas.unlock();} } }