public class SimpleLock { MonitorObject myMonitorObject = new MonitorObject(); boolean wasSignalled = false; public void lock(){ synchronized(myMonitorObject){ while(!wasSignalled){ try{ myMonitorObject.wait(); } catch(InterruptedException e){...} } //clear signal and continue running. wasSignalled = false; } } public void unlock(){ synchronized(myMonitorObject){ wasSignalled = true; myMonitorObject.notify(); } } }