CountDownLatch+ReentreenLock+ArrayBolckingQueue

(1) AQS(AbstractQueuedSynchronizer)概念: 有三个元素

1. volatile int state

2. 双向队列

3. CAS操作

 

(2)  CountDownLatch

1.countDownLatch继承了AQS

2.其构造方法传入参数,state=其参数

3.当其他线程调用countDown()方法的时候,CAS(Unsafe.compareAndSetState)得将state-1,如果发现state=0的时候,会唤醒在双向队列中的线程LockSupport.unpark(s.thread).

4.当主线程调用await()方法的时候,发现state=0,那么就返回。如果发现state>0,那么就会添加到双向队列中,但是其中又自旋了一遍,查看是否state=0了,等于0就将节点从双向队列中删除,且return。否则就LockSupport.unpark(this).

 

(3) ReentreenLock

1.ReentreenLock继承AQS,只讲非公平锁

  • 非公平-> 在获取时先cas改变一下 AQS 的state值, 改变成功就获取, 不然就加入到 AQS 的 Sync Queue 里面
  • 每次获取lock之前判断是否 AQS 里面的 Sync Queue 是否有等待获取的线程

2.lock方法,

尝试CAS更改state变成1&#

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值