码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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. ReentrantLock类核心结构
      2. lock方法
      3. 内部类--Sync(定义锁和获取锁资源方法)
        1. 抽象的lock方法
        2. 非公平锁获取锁资源方法--nofairTryAcquire
      4. 内部类--FairSync(继承Sync)
        1. lock
        2. tryAcquire
      5. 内部类--NonFairSync(继承Sync)
        1. lock
        2. tryAcquire
    lock总体流程调用思路图
    • 类图
    • 源码流程图

    感觉有帮到你的话,点个赞吧!靓仔

    原创不易,转载请说明出处!

  • 相关阅读:
    欧标插头EN50075测试项目
    物联网开发笔记(1)- 使用Wokwi仿真树莓派Pico点亮LED灯
    Java8-Java16部分重要新特性汇总
    第二证券|抖音发布三季度安全透明度报告,整治贩卖焦虑广告近3万条
    异步编程 - 03 线程池ThreadPoolExecutor原理剖析&源码详解
    d3dx9_43.dll丢失怎么解决,四个解决方法帮你解决d3dx9_43.dll丢失
    hive创建分区表
    docker-swarm集群搭建
    C++入门基础(下篇)
    yarn 运行electron
  • 原文地址:https://blog.csdn.net/weixin_38289303/article/details/133937692
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号