依赖AQS的ReentrantLock和CountDownLatch实现原理

ReentrantLock

lock() --->会把state 从0变成1 CAS操作,  1表示这个排他锁被占用了
unlock()  会把state减去1,直到减到0,把AQS的独占线程置空锁释放成功

CountDownLatch实现原理

1.CountDownLatch在构造时传递的参数int值用来初始化     AQS的state值(其实是AQS的实现类Sync)
2.一旦有一个线程调用await()就要去获取锁tryAcquireSharedNanos(), state不为0就获取不到. 所以入队等着
3.只要有一个线程调用了countDown()就会使state-1(用CAS操作确定其原子性),一旦减到0就会传播式地唤醒等待中的线程.
传播的过程中:队列后面的那个节点如果是需要唤醒的就唤醒它,如果不需要唤醒,就把队头设置成propagate状态来保证后面需要唤醒的节点成员排到队头的下一个时可以被正常唤醒(传播会继续).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值