AQS源码分析:竞争锁资源是如何实现的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1909个文字,预计阅读时间需要8分钟。
《深入QS源码探究——竞争资源+解析ReentrantLock源码+Sync类+扩展公共方法并定义抽象方法的具体类+FaireSync实现公平锁的AQS实现类+UnFairSync实现非公平锁的AQS实现类》
AQS源码探究---竞争锁资源我们进入ReentrantLock源码中查看其内部类
- Sync 对AQS进行扩展公共方法并定义抽象方法的抽象类
- FaireSync 实现公平锁的AQS的实现类
- UnFairSync 实现非公平锁的ASQ的实现类
我使用例子进行的debug,然后一步一步看源码。例子在文章最后面
以下流程皆以非公平锁为例
线程竞争锁资源AQS的state解释:
- 0 表示锁没有被占用
- 1 表示锁被占用了
- > 1 表示锁被重入了 PS: ReentrantLock是可重入锁
- 创建ReentrantLock对象
// ReetrantLock 默认创建一个非公平锁的AQS
public ReentrantLock() {
sync = new NonfairSync();
}
- 然后我们调用lock方法请求锁
- 成功,即将锁的owner主人设置为当前线程,接下来就是回到线程中执行线程的任务。
- 失败,即进入acquire的流程。
本文共计1909个文字,预计阅读时间需要8分钟。
《深入QS源码探究——竞争资源+解析ReentrantLock源码+Sync类+扩展公共方法并定义抽象方法的具体类+FaireSync实现公平锁的AQS实现类+UnFairSync实现非公平锁的AQS实现类》
AQS源码探究---竞争锁资源我们进入ReentrantLock源码中查看其内部类
- Sync 对AQS进行扩展公共方法并定义抽象方法的抽象类
- FaireSync 实现公平锁的AQS的实现类
- UnFairSync 实现非公平锁的ASQ的实现类
我使用例子进行的debug,然后一步一步看源码。例子在文章最后面
以下流程皆以非公平锁为例
线程竞争锁资源AQS的state解释:
- 0 表示锁没有被占用
- 1 表示锁被占用了
- > 1 表示锁被重入了 PS: ReentrantLock是可重入锁
- 创建ReentrantLock对象
// ReetrantLock 默认创建一个非公平锁的AQS
public ReentrantLock() {
sync = new NonfairSync();
}
- 然后我们调用lock方法请求锁
- 成功,即将锁的owner主人设置为当前线程,接下来就是回到线程中执行线程的任务。
- 失败,即进入acquire的流程。

