摘要: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();
}
}