samaphore、countdownlatch、cyclinarrier

目录

一、samaphore

1、介绍

2、应用

3、原理

二、countdownlatch

三、cyclicbarrier


一、samaphore

1、介绍

信号量,用来限制同时访问共享资源的线程上限。可以理解为停车场入口的提示排,标识有多少车位,有车位才能进去停车,samaphore就是这个管理车位上限的功能。

使用前先要new一个samaphore对象,然后线程要调用acquire方法获取许可才能运行,不然就在阻塞队列里面等待。

2、应用

使用semaphore限流,在访问高峰期时,让请求线程堵塞,高峰期过去再释放许可,当然他只适合限制单机线程数量,并且仅是限制线程数,不是线程资源数(例如连接数等)

用semaphore实现简单连接池,对比享元模式下实现,性能和可读性显然更好

3、原理

构造器:我们在构造的时候要传入信号量的大小,他其实就是调用的aqs同步器,然后把那个state赋值为了3

获取:每次要用就去调用方法用cas把state的数量减去一,当小于0就去阻塞队列里面创建头结点然后指向这个节点,把头设为-1,跟之前的一样就是aqs堵塞队列。

释放:释放会拿到state然后用cas把状态+1,拿到头节点为-1就改为0然后把后继节点唤醒,然后就看看能不能拿到锁,然后一个个往后唤醒,但是如果没有型号量了还是循环一次就又进队列了

二、countdownlatch

倒计时锁,用来做线程之间的同步协作,构造参数用来初始化等待计数,await用来等待计数归零,countdown用来计数减一

底层也是维护了个同步器继承AQS,他也是构造器直接复制到aqs的state,但跟其他同步器不同,他是state为0就能获得锁,当大于0就会被堵塞。当其他线程线程执行完调用释放的时候就用cas让计数器-1

三、cyclicbarrier

循环栅栏,用来进行线程协作,等待线程满足某个计数,构造时设置计数,每个线程执行到某个需要同步的时刻调用await方法进行等待,当等待的线程满足计数个数的时候,继续执行

他比countdownlatch的好处就是可以循环运行,countdown是只能使用一次。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卒获有所闻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值