import us.rm.concurrency.Lock;
import us.rm.concurrency.Condition;
public class MyThread implements Runnable {
private Lock lock;
private Condition condition;
public MyThread(Lock lock, Condition condition) {
this.lock = lock;
this.condition = condition;
}
public void run() {
lock.lock();
try {
condition.signal();
} finally {
lock.unlock();
}
}
}
Lock lock = new Lock();
Condition condition = new Condition();
Thread t1 = new Thread(new MyThread(lock, condition));
Thread t2 = new Thread(new MyThread(lock, condition));
lock.lock();
try {
t1.start();
t2.start();
condition.await();
} finally {
lock.unlock();
}