AbstractQueuedSynchronizer同步队列与Condition等待队列协同机

本文详细解析了AbstractQueuedSynchronizer(AQS)中的同步队列和Condition等待队列的协同机制。线程通过lock()进入同步队列,await()使线程移至等待队列等待signal。signal()将线程从等待队列移到同步队列,但不会立即唤醒,而是在unlock()后,线程作为同步队列头节点被唤醒继续执行。
摘要由CSDN通过智能技术生成

AbstractQueuedSynchronizer同步队列与Condition等待队列协同机制 - twoheads - 博客园

AQS维护了一个同步队列

Condition是JUC的一个接口,AQS的ConditionObject实现了这个接口,维护了一个等待队列(等待signal信号的队列)

 线程调用reentrantLock.lock()时,线程被加入到AQS同步队列中;

线程A调用condition.await()方法时,线程A从AQS同步队列中被移除,被加入到Condition等待队列,等待signal信号

线程B调用signal()方法,Condition等待队列中有一个节点A,把它取出来(A)加入到AQS同步队列中。这时候线程A并没有被唤醒(signal可以指定唤醒哪个condition)

只有发送singal信号的线程调用reentrantLock.unLock()后,因为它(线程A)已经被加入到AQS同步队列并且成为同步队列头结点,所以线程才会被唤醒。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值