CountDownLatch+ReentreenLock+ArrayBolckingQueue

本文介绍了Java并发编程中的三个重要工具类:CountDownLatch、ReentrantLock和ArrayBlockingQueue。CountDownLatch通过AQS实现计数器,用于线程间的同步;ReentrantLock是可重入锁,使用AQS实现非公平锁,支持锁的公平性和可中断;ArrayBlockingQueue是基于数组的阻塞队列,操作过程中涉及ReentrantLock的使用。
摘要由CSDN通过智能技术生成

(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&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值