美文网首页
Condition等待通知

Condition等待通知

作者: high_m | 来源:发表于2017-09-10 17:30 被阅读0次

如果你知道经典的生产消费模式(wait,notify实现),那么这篇文章你应该能够轻松地阅读理解。Condition接口也是为生产消费模式而生的,只不过它需要配合Lock接口使用。


使用示例

通过Lock实例的newCondition()方法获取Condition对象(监视器)。线程A获取锁后,调用condition.await()方法会导致释放锁并在此等待。线程B获取锁后调用condition.signal()方法会通知监视器,待线程B释放锁后,线程A可以重新加入到锁的竞争中,condition.await()返回的必要条件是线程A再次成功获取到锁

public class ConditionUseCase {
    Lock      lock      = new ReentrantLock();
    Condition condition = lock.newCondition();

    public void conditionWait() throws InterruptedException {
        lock.lock();
        try {
            condition.await();
        } finally {
            lock.unlock();
        }
    }

    public void conditionSignal() throws InterruptedException {
        lock.lock();
        try {
            condition.signal();
        } finally {
            lock.unlock();
        }
    }
}

Condition实现分析

ConditionObjective是AbstractQueuedSynchronizer的内部类,因为Condition的实现需要获取到相关联的锁。每个Condition对象都包含着一个队列(等待队列,不同于同步队列),该队列是实现等待通知功能的关键

调用await()方法时,会导致获取锁的线程放弃锁,并加入到等待队列的尾部,图示如下:


获取锁的线程加入等待队列(引自并发编程的艺术)

通知监视器的方法signal()方法会将等待队列的首节点(等待时间最长的节点)移动到同步队列中,图示如下:


节点从等待队列移动到同步队列(引自并发编程的艺术)

具体实现请查看源代码。

参考

相关文章

  • Condition等待通知

    如果你知道经典的生产消费模式(wait,notify实现),那么这篇文章你应该能够轻松地阅读理解。Conditio...

  • 再谈ReentrantLock之2

    Condition Lock的等待通知机制,一般这么用: 等待: 通知: await 1.将线程加入到等待队列 先...

  • 显示锁 Condition

    1、Object提供的等待通知方法 2、显示锁提供的等待通知 3、区别 4、源码 Condition.await(...

  • Condition

    Condition 实现管程里面的条件变量 Lock和Condition实现的管程,线程等待和通知需要调用awai...

  • 使用Condition实现等待/通知

    关键字synchronized与wait()和notify()/notifyAll()方法相结合可以实现等待/通知...

  • Java的AQS详解3--Condition接口

    Condition定义了等待/通知两种类型的方法,当前线程调用这些方法时,需要提前获取到Condition关联的锁...

  • 如何理解Condition

    在jdk1.5以后并发包中提供了Lock接口,Condition接口与Lock配合使用可以实现等待/通知模式,在此...

  • 8. 并发终结之Condition条件变量

    Condition接口作为wait/notify的替代品来实现等待/通知,很好的解决了过早唤醒的问题,并且bool...

  • ReentrantLock用法

    ReentrantLock实现同步锁 结果: Condition等待/唤醒 结果: 多个Condition实现部分...

  • 2. AbstractQueuedSynchronizer(二)

    Conditon接口与示例 Condition定义了等待/通知两种类型的方法,当前线程调用这些方法时,需要提前获取...

网友评论

      本文标题:Condition等待通知

      本文链接:https://www.haomeiwen.com/subject/ojftsxtx.html