import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.CountDownLatch; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; public class Brusautomat { private int kapasitet; private int antallBrus; private Lock laas = new ReentrantLock(); private Condition maaFyllesOpp = laas.newCondition(); private Condition tom = laas.newCondition(); private CountDownLatch cdl; public Brusautomat(int kapasitet, int antallBrusDrikkere){ this.kapasitet = kapasitet; antallBrus = kapasitet; cdl = new CountDownLatch(antallBrusDrikkere); } public boolean refill(){ laas.lock(); try { while(antallBrus > 0){ if(cdl.getCount() == 0){ //System.out.println("Return false"); return false; } maaFyllesOpp.await(); } antallBrus = kapasitet; tom.signalAll(); System.out.println("Brusmaksinen er naa fylt opp :))"); } catch (Exception e) { System.out.println("Noe gikk galt i refill"); }finally{ laas.unlock(); } return true; } public void kjopBrus(){ laas.lock(); try { while(antallBrus == 0){ tom.await(); } antallBrus--; System.out.println("Jeg fikk en brus :)"); if(antallBrus == 0){ maaFyllesOpp.signal(); } } catch (Exception e) { System.out.println("Noe gikk galt i kjopBrus"); }finally{ laas.unlock(); } } public void countdown(){ cdl.countDown(); if(cdl.getCount() == 0){ laas.lock(); try{ //System.out.println("Siste signal"); maaFyllesOpp.signal(); }finally{ laas.unlock(); } } } }