码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • AQS的简单说明


    1.概述

    AQS全称AbstractQueuedSynchronizer,是用来实现锁或者队列同步器的公共基础部分的抽象实现,是整个JUC体系的基石,用于解决锁分配给谁的问题,ReentrantLock底层的实现就是AQS。

    2.AQS实现原理

    AQS内部有一个由volatile修饰(保证其可见性)的变量state,用此来表示锁是否被使用,初始化为0,当线程获取到锁时,state加1,此时当其他线程到来时,发现state为1,就会封装为Node去CLH变体的FIFO队列(先进先出的双向链表)中排队等待,等到占用锁的那个线程执行完毕,state减1,然后队列中等待的线程按顺序获取锁。

    3.AQS内部类Node说明

     

    在线程加入队列时要封装为Node,在Node中有一个表示线程的等待状态waitStatus,初始值为0。

    4.AQS中acquire()方法的简单说明

     4.1tryAcquire

    这里运用了板块设计模式,tryAcquire方法的具体实现需要子类去实现。

    4.2addWaiter

    意思就是将此结点封装为Node结点,然后加入到队列中。

    4.3acquireQueued

    坐稳队列,在此方法中进行队列中前置结点状态的修改以及阻塞结点。

  • 相关阅读:
    【UniApp】-uni-app概述
    【计算机毕业设计】45.医院挂号系统
    【超好懂的比赛题解】HNCPC Multi-university Training Round2 比赛题解(AHBGIK)
    境外服务器停机:原因、影响以及如何预防
    idea自定义 postfix completion提高编码效率
    Bootstrap中固定某一个元素不随滚动条滚动
    OFDM 十六讲 4 -What is a Cyclic Prefix in OFDM
    OpenAI再次与Altman谈判;ChatGPT Voice正式上线
    idea 集成 git 后使用的常用命令
    【git】git ignore如何添加core/config.py忽略
  • 原文地址:https://blog.csdn.net/m0_62565675/article/details/133687468
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号