import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.Condition; class Monitor { private int number = 0; private Lock lock = new ReentrantLock(); private Condition over9000 = lock.newCondition(); public void increment() { lock.lock(); try { number++; if (number > 9000) { over9000.signal(); } } finally { lock.unlock(); } } public int hentTall() { lock.lock(); try { return number; } finally { lock.unlock(); } } public void reduce() { lock.lock(); try { while (number <= 9000) { over9000.await(); } number -= 3000; } catch (InterruptedException ie) { System.out.println("Interrupted"); } finally { lock.unlock(); } } }