import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class Monitor { private LinkedList tallListe = new LinkedList<>(); private Lock laas = new ReentrantLock(); private Condition tomListe = laas.newCondition(); private int antallTraader; public Monitor(int antallTraader){ this.antallTraader = antallTraader; } public void leggTil(int tall){ laas.lock(); try{ tallListe.add(tall); tomListe.signalAll(); }finally{ laas.unlock(); } } public void ferdig(){ laas.lock(); try{ antallTraader--; }finally{ laas.unlock(); } } //Hente ut to tall public List hentTo(){ laas.lock(); try { while(tallListe.size() < 2){ if(antallTraader == 0) return null; tomListe.await(); } List returnTall = new ArrayList<>(2); returnTall.add(tallListe.remove()); returnTall.add(tallListe.remove()); return returnTall; } catch (Exception e) { return null; }finally{ laas.unlock(); } } }