AQS源码分析:竞争锁资源是如何实现的?

2026-05-25 17:560阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1909个文字,预计阅读时间需要8分钟。

AQS源码分析:竞争锁资源是如何实现的?

《深入QS源码探究——竞争资源+解析ReentrantLock源码+Sync类+扩展公共方法并定义抽象方法的具体类+FaireSync实现公平锁的AQS实现类+UnFairSync实现非公平锁的AQS实现类》

AQS源码探究---竞争锁资源

我们进入ReentrantLock源码中查看其内部类

  • Sync 对AQS进行扩展公共方法并定义抽象方法的抽象类
  • FaireSync 实现公平锁的AQS的实现类
  • UnFairSync 实现非公平锁的ASQ的实现类

我使用例子进行的debug,然后一步一步看源码。例子在文章最后面

以下流程皆以非公平锁为例

线程竞争锁资源

AQS的state解释:

  • 0 表示锁没有被占用
  • 1 表示锁被占用了
  • > 1 表示锁被重入了 PS: ReentrantLock是可重入锁
获得锁执行流程
  1. 创建ReentrantLock对象

// ReetrantLock 默认创建一个非公平锁的AQS public ReentrantLock() { sync = new NonfairSync(); }

  1. 然后我们调用lock方法请求锁
    • 成功,即将锁的owner主人设置为当前线程,接下来就是回到线程中执行线程的任务。
    • 失败,即进入acquire的流程。
阅读全文

本文共计1909个文字,预计阅读时间需要8分钟。

AQS源码分析:竞争锁资源是如何实现的?

《深入QS源码探究——竞争资源+解析ReentrantLock源码+Sync类+扩展公共方法并定义抽象方法的具体类+FaireSync实现公平锁的AQS实现类+UnFairSync实现非公平锁的AQS实现类》

AQS源码探究---竞争锁资源

我们进入ReentrantLock源码中查看其内部类

  • Sync 对AQS进行扩展公共方法并定义抽象方法的抽象类
  • FaireSync 实现公平锁的AQS的实现类
  • UnFairSync 实现非公平锁的ASQ的实现类

我使用例子进行的debug,然后一步一步看源码。例子在文章最后面

以下流程皆以非公平锁为例

线程竞争锁资源

AQS的state解释:

  • 0 表示锁没有被占用
  • 1 表示锁被占用了
  • > 1 表示锁被重入了 PS: ReentrantLock是可重入锁
获得锁执行流程
  1. 创建ReentrantLock对象

// ReetrantLock 默认创建一个非公平锁的AQS public ReentrantLock() { sync = new NonfairSync(); }

  1. 然后我们调用lock方法请求锁
    • 成功,即将锁的owner主人设置为当前线程,接下来就是回到线程中执行线程的任务。
    • 失败,即进入acquire的流程。
阅读全文