并发工具基本原理Condition

Condition的使用及原理

在synchronized里面是wait/notify
在condition里面是await/signal

AQS里面的方法

在这里插入图片描述

在这里插入图片描述
condition状态-2,封装成节点。该节点既是firstWaiter,也是lastWaiter,后续有节点加入,nextWaiter指向下个节点
在这里插入图片描述
调用wait阻塞时候要释放锁,释放锁fullyRelease,重入次数

在这里插入图片描述
释放后会唤醒线程
在这里插入图片描述
判断是否在同步队列中,如果不在同步队列中,说明当前没有被唤醒
只有aqs队列中才存在prev和aqs关系
在这里插入图片描述
阻塞后从同步队列进入condition’队列
通过自旋方式,循环遍历
在这里插入图片描述
判断是否中断,中断唤醒,判断是否在aqs队列
在这里插入图片描述

如果线程a不在队列中,说明阻塞
然后signal去唤醒,
在这里插入图片描述
先判断当前获得锁的线程是否是当前线程
在这里插入图片描述
如果当前线程状态是-2,通过cas原子操作更新为0
在这里插入图片描述
将当前node添加到aqs队列中,将节点从condition队列中移除掉。线程又进入aqs队列,又去抢占锁,唤醒线程

CountDownLatch原理

计数器,允许线程一直等待,通过计时阻塞
在这里插入图片描述
阻塞1000个线程,然后countDown后释放,模拟高并发场景
在这里插入图片描述
await/countDown

await
共享锁
在这里插入图片描述
等于0,释放
在这里插入图片描述

semaphore

AQS限流 令牌
限流操作
在这里插入图片描述
aquire共享锁实现

阻塞队列

MQ,消息队列
线程池中会用到

在这里插入图片描述

Atomic

原子操作
基于cas
在这里插入图片描述
int++,线程递增操作,无法保证原子性,所以使用atomicinteger
用到乐观锁,通过乐观锁方式解决原子性
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值