import java.util.ArrayList; import java.util.LinkedList; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; class Monitor { private LinkedList tallArray = new LinkedList(); private Lock laas = new ReentrantLock(); private Condition tomt = laas.newCondition(); private int antallSettInn; public Monitor(int antallSettInn){ this.antallSettInn = antallSettInn; } public void ferdig(){ laas.lock(); try{ antallSettInn--; }finally{ laas.unlock(); } } public void settInnTall(int tall){ laas.lock(); try{ tallArray.add(tall); tomt.signalAll(); }finally{ laas.unlock(); } } public ArrayList taUtToTall(){ laas.lock(); try { while(tallArray.size() < 2){ if(antallSettInn == 0) return null; tomt.await(); } ArrayList returTall = new ArrayList(); returTall.add(tallArray.remove(0)); returTall.add(tallArray.remove(0)); return returTall; } catch (InterruptedException e) { return null; }finally{ laas.unlock(); } } }