ReentractLock底层原来是基于AQS来实现锁的

1、测试类

static ReentrantLock lock = new ReentrantLock();

2、ReentrantLock类

public ReentrantLock() {
    sync = new NonfairSync();
}

默认的构造函数里,创建了一个Sync,实现类是NonfairSync。

3、测试类,加锁

lock.lock();

4、ReentrantLock类

public void lock() {
    sync.lock();
}

由此可见,ReentrantLock在加锁时,是直接基于底层的Sync来实现的l,ReentractLock类其实就是外层一个薄薄封装的类,Sync是ReentrantLock底层的核心组件。

5、ReentrantLock类中内部Sync类的定义。

abstract static class Sync extends AbstractQueuedSynchronizer

Sync是ReentrantLock中的静态内部类,继承于AbstractQueuedSynchronizer类( AQS),AQS是抽象队列同步器,是java并发包各种并发工具(锁、同步器)的底层核心组件。

6、AbstractQueuedSynchronizer类

属性Node,构造成一个双向链表,也就是我们说的队列。
state(核心变量,加锁、释放锁都是基于state来完成的)

7、总结

1)AQS,AbstractQueuedSynchronizer,抽象队列同步器。
2)NonfairSync是Sync的一个子类,覆盖重写了几个方法,没什么特别。
3)ReentractLock、synchronized(可重入加锁的:一个线程拿到一把锁是可以多次加锁的)-> AQS -> NonfairSync(非公平的同步组件)。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值