import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class ConcurrentProgrammingExample {
private final Lock lock = new ReentrantLock();
private final Condition condition = lock.newCondition();
private boolean flag = false;
public void thread1() throws InterruptedException {
lock.lock();
try {
while (!flag) {
condition.await();
}
} finally {
lock.unlock();
}
}
public void thread2() {
lock.lock();
try {
flag = true;
condition.signal();
} finally {
lock.unlock();
}
}
}