当前位置: 首页 > news >正文

AQS是什么

AQS:AbstructQueuedSynchronizer是java.util.concurrent.locks包中的一个类,是多线程同步器,J.U.C包中的多个组件的底层实现都使用到了它。如:Lock、CountDownLatch、Semaphore.

从本质上来说AQS实现了两种机制的锁,排他锁和共享锁。排他锁就是存在于多个线程同时竞争一个资源时,同一时刻只允许一个线程访问该共享资源,也就是只有一个线程获得到锁资源,比如Lock中的ReentrantLock重入锁实现就是用到的AQS排他锁的功能。共享锁又称读锁,就是同一时候允许多个线程获得锁资源,比如CountDownLatch和Semaphore都是使用到了AQS中的共享锁功能。

AQS工作机制:

        1、线程阻塞等待:当一个线程获取锁失败时,它会进入阻塞状态,等待其它线程释放锁。

        2、锁分配机制: AQS使用CLH队列锁实现线程的阻塞与唤醒,即将暂时获取不到锁的线程放入阻塞队列中。

        3、FIFO队列:CLH队列是一个虚拟的先进先出的双向队列,它是自旋锁的一种改进,不存在真实的实例,而是只存在着节点之间的关联关系,CLH队列中的一个节点代表着一个线程,它保存着线程的引用(thread)、线程的当前状态(waitStatus)、前驱节点(prev)、后继节点(next)。线程的状态state是volaile修辞的,以保证各个线程之间的可见性,获取与修改线程的方法都是final修饰的,不允许子类进行修改。AQS通过CLH同步队列管理线程的等待和唤醒,确保线程按顺序获取锁。

        

http://www.lryc.cn/news/473954.html

相关文章:

  • Spring IOC容器简介
  • 【backstopjs】入门安装环境
  • LocalDate 类常用方法详解(日期时间类)
  • kmp desktop实现excel预览
  • OB_GINS_day3
  • 【Python3】【力扣题】405. 数字转换为十六进制数
  • 记录一次企业外部通过ssh 连接数据库的事DBeaver
  • 中聚企服:中聚AI女娲大模型,企业难题迎刃而解!
  • 对镜像精简
  • 老电脑不能装纯净版windows
  • 在Python中实现一个简单的社交媒体应用
  • pytest高版本兼容test_data[“log“] = _handle_ansi(“\n“.join(logs))错误
  • Redis技术入门与实践指南
  • 如何一键完成20个Oracle实例运维脚本部署
  • 【C++刷题】力扣-#598-区间加法 II
  • 优雅的LUA数据记录方法-serpent序列化+LUA Table
  • 初始JavaEE篇——多线程(4):wait、notify,饿汉模式,懒汉模式,指令重排序
  • Apache Solr 身份认证绕过导致任意文件读取漏洞复现(CVE-2024-45216)
  • C#整合Ollama实现本地LLMs调用
  • C++基于opencv的视频质量检测--图像抖动检测
  • Cuda By Example - 11 (Texture Memory 2-D)
  • Go匿名结构体使用场景
  • Vue 发布十年了!你知道我这十年是怎么过的吗?
  • Unity 6 来袭
  • SpringMVC课时1
  • 【小白学机器学习30】样本统计的核心参数:均值/期望,方差,标准差,标准值。
  • flink1.17.2安装和使用
  • C向C++入门-- C语言填坑
  • 扫雷游戏(C语言详解)
  • 信刻全自动光盘摆渡系统