AQS中lock源码解析

编程入门 行业动态 更新时间:2024-10-10 21:26:20

AQS中lock<a href=https://www.elefans.com/category/jswz/34/1770099.html style=源码解析"/>

AQS中lock源码解析

什么是AQS?
  1. 就是基于双向链表+CAS实现的锁的一种机制或者方法思想。
  2. 就是AbstractQueuedSynchronizer,是Java并发包下的一个基类
  3. 基于AQS实现的同步器包括:ReentrantLock、CountDownLatch、Samaphone、FutureTask、ReentrantWriteLock
AbstractQueuedSynchronizer源码解析(基于ReentrantLock的非公平锁)
  1. AQS类中核心的属性:定义内部类--双向链表Node对象,一个头节点head,一个尾节点tail,一个用来标识锁的次数的状态state。如下图:
  2. AQS中lock动作的核心方法
    1. 从AQS队列中获取锁资源
    2. 将当前节点添加到AQS双向链表尾部
    3. 初始化AQS队列,向其初始化一个空的head节点,并将当前节点放入AQS队列尾部
    4. 找到当前节点之前有效的第一个节点,将中间无效节点干掉
    5. 基于Unsafe类的park方法挂起当前线程
    6. 取消请求锁资源
    7. 唤醒下一个节点
    8. 基于CAS对AQS中的属性进行更新
  3. ReentrantLock的核心属性和方法
    1. lock方法
    2. 内部类--Sync(定义锁和获取锁资源方法)
      1. 抽象的lock方法
      2. 非公平锁获取锁资源方法--nofairTryAcquire
    3. 内部类--FairSync(继承Sync)
      1. lock
      2. tryAcquire
    4. 内部类--NonFairSync(继承Sync)
      1. lock
      2. tryAcquire
lock总体流程调用思路图

更多推荐

AQS中lock源码解析

本文发布于:2023-12-07 08:55:32,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1670751.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:源码   AQS   lock

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!