Semaphore底层原理

1.信号量内部有一个Sync类,继承了AQS抽象队列同步器

2.sync类还有2个子类,一个公平锁,一个非公平锁,默认是非公平锁

3.new对象的时候,会设置好凭证(计数器),当凭证为0的时候,就一直阻塞

4.在加锁的时候,会通过cas去抢锁,抢到,计数器减去1

5.如果抢不到,加入队列,这个队列就是由AQS中node节点构成的双向链表组成的同步等待队列

6.如果队列不存在,那么先创建队列

7.如果队列存在,那么把节点直接入队,并修改节点状态为可唤醒的状态-1

8.然后调用park方法进行阻塞

9.在释放锁的时候,把计数器加1,修改节点的状态为0 (初始状态)

10.调用unpark方法进行唤醒阻塞的线程

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值