详解AQS中的condition源码原理

时间:2022-11-03 17:28:34
摘要:condition用于显式的等待通知,等待过程可以挂起并释放锁,唤醒后重新拿到锁。

本文分享自华为云社区《AQS中的condition源码原理详细分析》,作者:breakDawn。

condition的用法

condition用于显式的等待通知,等待过程可以挂起并释放锁,唤醒后重新拿到锁。

和直接用lock\unlock去做等待通知的区别在于,lock是不会释放锁的,但是利用的condition的await则可以,且唤醒后会自动重新拿回锁。

Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();
public void conditionWait() throws InterruptedException {
 lock.lock();
 try {
 // if(xxxx)判断不满足条件,等待,释放锁
 condition.await();
 } finally {
 lock.unlock();
 }
}
public void conditionSignal() throws InterruptedException {
 lock.lock();
 try {
 // 做完事情了,通知condition上等待的开始抢占
 condition.signal();
 } finally {
 lock.unlock();
 }
}