import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
public class ConditionMain {
public static void main(String[] args) {
ReentrantLock lock = new ReentrantLock();
Condition condition =lock.newCondition();
new Thread(()->{
try {
lock.lock();
System.out.println("Step 1 :wait signal "); //1
condition.await();
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Step 4 :get signal"); // 4
lock.unlock();
}
}).start();
new Thread(()->{
try {
lock.lock();
System.out.println("Step 2 :get lock "); //2
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
condition.signal();
System.out.println("Step 3 :send signal"); //3
lock.unlock();
}).start();
}
}
打印输出
Step 1 :wait signal
Step 2 :get lock
Step 3 :send signal
Step 4 :get signal