ReentrantLock 实现原理

不多说,读源码,看类图。其中 ReentrantLock 有三个内部类 Sync ,NonfairSync  ,FairSync 。

 

 


Sync 是一个抽象类,继承自 抽象类 AbstractQueuedSynchronizer。AbstractQueuedSynchronizer 是什么呢?这个就是大名鼎鼎的 AQS 了,其实它是个 FIFo 的队列,里面排队的是等待这个锁的线程。

 

整个 ReentrantLock 就是对 Sync 某个实现的包装。公平锁就包装 FairSync ,非公平锁就包装 NonfairSync 。看源码:

/**
 * Creates an instance of {@code ReentrantLock}with the
 * given fairness policy.
 *
 * @param
fair {@code true}if this lock should use a fair ordering policy
 */
public ReentrantLock(boolean fair) {
   
sync = fair ? new FairSync() : new NonfairSync();
}

 

 

 

总结:ReentrantLock 是通过一个 FIFO 的等待队列来实现的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值