import java.util.ArrayList; import java.util.concurrent.locks.ReentrantLock; // Monitor = klasse (objekt) som håndterer felles data public class KnivMonitor { private ReentrantLock lock = new ReentrantLock(); private ArrayList knivHaug = new ArrayList<>(); public int antallKniver(){ return knivHaug.size(); } public void settInn(Kniv kniv) { lock.lock(); // Lås = låser kritisk region (en tråd av gangen kan endre felles kode) try { knivHaug.add(kniv); // Kritisk region = kode som endrer felles data } finally { lock.unlock(); } } public Kniv[] taUtTo() { lock.lock(); try { if (knivHaug.size() < 2) { return null; } Kniv[] kniver = new Kniv[2]; kniver[0] = knivHaug.remove(0); kniver[1] = knivHaug.remove(0); return kniver; } finally { lock.unlock(); } } }