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(); } } }