import java.util.concurrent.*; import java.util.concurrent.locks.*; // ME among As. // ME between Bs and Cs. // ME between As and Cs. // Priority to As. class Monitor { Lock lock = new ReentrantLock(); Condition ... ... Monitor() { ... } public void Aentry() { lock.lock(); ... lock.unlock(); } public void Aexit() { lock.lock(); ... lock.unlock(); } public void Bentry() { lock.lock(); ... lock.unlock(); } public void Bexit() { lock.lock(); ... lock.unlock(); } public void Centry() { lock.lock(); ... lock.unlock(); } public void Cexit() { lock.lock(); ... lock.unlock(); } }