import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class CounterMonitor { private Lock lås = new ReentrantLock(); private Condition ikkeNull = lås.newCondition(); private int sharedCounter = 0; // Kritisk region public void incrementCounter() { lås.lock(); try { sharedCounter++; ikkeNull.signalAll(); } finally { lås.unlock(); } } public void decrementCounter() { lås.lock(); try { while (sharedCounter < 1) { ikkeNull.await(); } sharedCounter--; } catch (InterruptedException e) { System.out.println("Womp"); } finally { lås.unlock(); } } public int getCounter() { lås.lock(); try { return sharedCounter; } finally { lås.unlock(); } } }