AQS系列之共享锁的应用解析:Semaphore

AQS系列之AbstractQueuedSynchronizer基础分析
AQS系列之以排斥锁分析
AQS系列之共享锁解析
AQS系列之共享锁的应用解析:Semaphore



一、简介

Semaphore即信号量,常用于同时限制访问某些资源的线程数量。
其内部抽象类Fair继承了AQS,Semaphore正是通过Sync实现数量的控制

1. Sync

Semaphore是基于AQS原理实现的,但并不是说Semaphore继承了AbstractQueuedSynchronizer抽象类,而是其内部类进行了AbstractQueuedSynchronizer的继承,Semaphore通过内部类实现,后续其他几个AQS的应用同样也是如此。
具体到Semaphore,内部类Sync继承了AQS,而且Sync同样的也只是个抽象类,具体有氛围两个策略:公平锁(FairSync)和非公平锁(UnFairSync),两者的区别是对于竞争资源的线程是否严格遵守先到先得的公平策略。
Semaphore默认使用非公平锁。

2. state

Sync的state代表可以同时访问的线程数量,也可能理解为访问的许可证(permit)数量。每个线程访问(acquire)时需要拿到对应的许可证,否则进行阻塞,访问结束则返还(release)许可证。
state只能在Semaphore的构造方法中进行初始化,后续不能进行修改。

3. 对外方法

Semaphore对外方法
上图整理了Semaphore方法,主要是了解其思路,不是细究提供了哪些api。AQS其他应用类的一些方法思路也差不多,虽然命名可以有一定差异。后续在对其他类解析时不会再整理一次。

二、资源获取acquire

根据前面几篇文章对AQS的解析,共享锁不同应用类的核心逻辑实在其对AbstractQueuedSynchronizer的protected int tryAcquireShared(int acquires)的重写上。
state代表剩余的permit数量,只要state大于acquire则说明资源满足本线程所需,获取成功,否则失败。

1. 非公平锁

public boolean tryAcquire(int permits) {
   
    if (permits
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值