package LinGUIne.utilities; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * Simple monitor based on java locks and conditions which is AutoCloseable. * * @author Kyle Mullins */ public class Monitor implements AutoCloseable { private Lock monitorLock; private Condition monitorCondition; public Monitor(Lock lock){ monitorLock = lock; monitorCondition = monitorLock.newCondition(); } public Monitor(){ this(new ReentrantLock()); } public Monitor enter(){ monitorLock.lock(); return this; } public void exit(){ monitorLock.unlock(); } public void await() throws InterruptedException{ monitorCondition.await(); } public void signal(){ monitorCondition.signal(); } @Override public void close(){ exit(); } }