从ReentrantLock的角度思考AQS

本文从ReentrantLock出发,通过分析其内部的公平锁和非公平锁实现,探讨AQS(AbstractQueuedSynchronizer)的工作原理。在加锁过程中,非公平锁会尝试直接加锁,失败则进入等待队列。公平锁则直接进入等待队列。解锁时,ReentrantLock不区分公平锁和非公平锁,减少重入次数并判断资源状态。AQS的高效利用源于大量使用CAS操作确保锁的及时释放。
摘要由CSDN通过智能技术生成

我们上一篇简单介绍了AQS这个技术点,这一篇我们从ReentrantLock这个锁的角度来分析A Q S ,帮助大家理解
在这里插入图片描述

从源码开始

首先,我们先看一下ReentrantLock的内部的抽象类Sync,这个是继承于AQS的,重写了其中的一些方法,我 们会在下面源码中解析,继续往下看,记住这个Sync
在这里插入图片描述

我们知道这个锁可以实现公平锁和非公平锁,我们来看下是如何实现的

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

上面的是非公平锁,下面的是公平锁,默认的是非公平锁,我们看下非公平锁的实现是先通过CAS的方式 去加锁,加锁成功之后就将当前线程设置为活跃的持有锁的线程

1 /**
2	* The current owner of exclusive mode synchronization.
3	*/
4	private transient Thread exclusiveOwnerThread;

失败的话会执行acquire方法,OK,这里我们再看下公平锁FairSync的lock方法的实现,这个公平锁没有 像上面非公平锁那样判断,而是直接调用了acquire方法

这里大家应该也懂了非公平锁和公平锁的真正区别了吧,就是非公平锁的时候,线程来的时候会多一次直 接尝试加锁,剩下的操作就是一样了

OK,让我们进去acquire方法看

在这里插入图片描述

看一下try Acquire方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值