AQS:原理、组成与锁机制解析
1. 什么是AQS作用是什么AQSAbstractQueuedSynchronizerAQS是一个用于构建锁和同步器的抽象的线程同步框架用于解决线程阻塞和资源抢占的问题。2. AQS的组成包含哪些内容1.state同步状态用于记录资源的占用模式即记录资源在独占模式和共享模式下什么时候占用锁。2.CLH队列是一个虚拟双向队列用于存放暂时获取锁失败的线程每个在队列里等待的线程被封装成一个Node节点。3. AQS独占锁的获取流程先直接获抢锁第一次抢锁线程调用lock()方法首先通过CAS抢锁如果state为0则抢锁成功当前线程成功持锁如果state为1则表示锁已经被其他线程持有抢锁失败抢锁失败则进入acquire(int arg)方法。抢锁失败进入acqui()方法第二次抢锁一进入acquire(int arg)方法马上调用tryAcquire(arg) 方法再次进行抢锁tryAcquire(arg)里是用nonfairTryAcquire方法CAS快速进行抢锁。入队如果返回true则表示抢锁成功该线程成功持有锁若返回false则抢锁失败需要用addWaiter方法CAS自旋式将这个线程放入acquireQueued队列里。排队与阻塞这个线程放入acquireQueued队列里(1).首先如果在队列里是对头元素直接获取锁该线程成功持锁(2).若不是对头元素则判断其前驱是否为对头元素是则可以抢锁只有头节点的后继才有资格尝试获取锁直接调用tryAcquire方法抢锁如果抢锁成功则当前线程成功持锁(3).失败则线程阻塞看看前驱节点的状态是否为可以唤醒后继节点状态即SIGNAL-1如果是则等待被唤醒后得到抢锁资格继续抢锁如果不是即前驱节点异常即SIGNAL-1时重新通过CAS自旋抢锁直至抢到锁或者其前驱节点状态为SIGNAL-1。4. 共享模式和独占模式有什么区别多线程实现下独占模式某一个操作只能给一个线程进行线程A在进行时别的线程只能阻塞。state就是用来判断该操作是否在被线程进行。eg线程A想要执行某一操作若state0说明这个操作没有别的线程在执行该线程可以执行这个操作并且state会将0改成1此时state1若此时线程B也想进行这个操作但是state1则线程B就进行不了这个操作会被阻塞。共享模式某一个操作能够给多个线程执行线程A/B/C...等等只要在共享名额用户自己设置的内可以多线程一起操作。eg共享模式下需要限制线程共享名额不限制系统会崩溃用state来限制。首先先设置共享的数量n所以staten0线程A想要执行某一操作staten说明这个操作还没有别的线程在执行该线程可以执行这个操作并且state会数量减一来表示又有1个线程进行该操作共享名额减一所以state-1若此时线程B也想进行这个操作也是重复这个流程直至有某个线程想进行这个操作但是state0则表示共享名额为0已经不能再共享这个操作了这个线程就好被阻塞。5. AQS的公平锁和非公平锁有什么区别公平锁和非公平锁最大的区别在于在抢锁时是否排队。公平锁公平锁在线程抢锁时会遵循先进先出的排队原则排队只有队头元素可以拿到锁其余线程会被阻塞在外面需要等待唤醒后才能再次尝试获取锁。优点公平锁这样保证了每个线程都能拿到锁不会产生饥饿线程。缺点这样排队取锁的方式每个线程都会阻塞与唤醒性能消耗太大。非公平锁非公平锁在线程抢锁时先会插队抢锁即一上来就先直接抢锁不先排队如果刚刚好有锁空闲了可以直接强到并尺有锁若一上来插队抢锁不成功才会去排队。优点没有一上来就排队而是插队抢锁减少了阻塞和唤醒消耗的性能。缺点会存在饥饿线程的风险因为有可能插队抢锁多次成功导致在排队的线程一直拿不到锁。

相关新闻

一文读懂Git 的底层原理:从 Commit 到 Blob

一文读懂Git 的底层原理:从 Commit 到 Blob

文章目录Git 概述Git 的内容追踪原理通过实际操作来理解第一种 object 类型:commit第二种 object 类型:tree第三种 object 类型:blob第二次 commit用 reference 追踪 commitTag总结Git 作为分布式版本管理工具的核心作用:支撑多人…

2026/8/18 19:34:37 阅读更多 →
langchain1.X学习笔记-22-中间件Middleware的常用内置中间件(一)SummarizationMiddleware和HumanInTheLoopMiddleware

langchain1.X学习笔记-22-中间件Middleware的常用内置中间件(一)SummarizationMiddleware和HumanInTheLoopMiddleware

文章目录 1 模型初始化 2 SummarizationMiddleware中间件 2.1 参数说明 2.1.1 参数1:model—用于摘要的模型 2.1.2 参数2:trigger—摘要触发条件 2.1.3 参数3:keep—摘要时保留的原始消息 2.1.4 参数4:token_counter—统计token数量的函数 2.1.5 参数5:summary_prompt—摘…

2026/8/18 19:34:37 阅读更多 →
函数相关知识

函数相关知识

一、什么是函数? 函数是一个“可执行的代码块”,但在 JavaScript 中,它本质上是一种特殊的对象(Object),它拥有普通对象没有的“内部属性”[[Call]],这就是它能被执行的原因。特殊之处&#xff…

2026/8/18 19:34:36 阅读更多 →

最新新闻

BetterJoy完整上手攻略:让Switch手柄在PC上从“插上没反应“到“玩出花样“

BetterJoy完整上手攻略:让Switch手柄在PC上从“插上没反应“到“玩出花样“

BetterJoy完整上手攻略:让Switch手柄在PC上从"插上没反应"到"玩出花样" 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XIn…

2026/8/18 20:58:33 阅读更多 →
把 OData 当成资源而不是远程函数,SAP Gateway 高质量服务设计的关键原则

把 OData 当成资源而不是远程函数,SAP Gateway 高质量服务设计的关键原则

在 SAP S/4HANA 项目里做一个 OData 服务,真正困难的地方往往不是把数据从 ABAP 内表送到 HTTP Response。SEGW 可以生成代码,RAP 可以通过 Service Definition 和 Service Binding 暴露服务,CAP 也能很快把 CDS 模型发布成 OData。真正拉开服务质量差距的,是模型到底有没有…

2026/8/18 20:58:33 阅读更多 →
零基础也能做出会飞的ESP32无人机:新手从零到首飞的完整路线

零基础也能做出会飞的ESP32无人机:新手从零到首飞的完整路线

零基础也能做出会飞的ESP32无人机:新手从零到首飞的完整路线 【免费下载链接】esp-drone Mini Drone/Quadcopter Firmware for ESP32 and ESP32-S Series SoCs. 项目地址: https://gitcode.com/GitHub_Trending/es/esp-drone 很多人以为做一架能自己飞的无人…

2026/8/18 20:58:33 阅读更多 →
ChatGLM-4本地部署实战:vLLM推理、魔塔Embedding与LoRA微调

ChatGLM-4本地部署实战:vLLM推理、魔塔Embedding与LoRA微调

最近在尝试本地部署大模型时,发现很多教程要么只讲理论,要么代码和配置七零八落,尤其是涉及 vLLM 这种高性能推理框架时,环境依赖和参数调优经常让人头疼。本文将围绕 ChatGLM-4 ,整合一套从零开始的完整实战方案&am…

2026/8/18 20:58:33 阅读更多 →
FreeRTOS内存管理深度解析:5种方案选型与嵌入式开发避坑指南

FreeRTOS内存管理深度解析:5种方案选型与嵌入式开发避坑指南

1. 项目概述:为什么FreeRTOS的内存管理值得深究?如果你在嵌入式领域摸爬滚打了一段时间,尤其是在STM32、ESP32这类资源受限的MCU上用过FreeRTOS,那你大概率遇到过一些“玄学”问题:任务跑着跑着就卡死了,串…

2026/8/18 20:58:33 阅读更多 →
Segment Anything Model (SAM) 核心原理与实战:从提示式分割到工程落地

Segment Anything Model (SAM) 核心原理与实战:从提示式分割到工程落地

如果你正在处理图像分割任务,无论是从遥感影像中提取建筑物轮廓,还是在医学图像中定位病灶区域,一个绕不开的挑战就是:如何快速、精准地标注数据?传统的分割模型,如U-Net、Mask R-CNN,虽然强大&…

2026/8/18 20:57:32 阅读更多 →

日新闻

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 如果你还停留在"看网课 不停暂停 截图 …

2026/8/18 0:00:57 阅读更多 →
思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 你是不是也经历过这种时刻:设计稿里…

2026/8/18 0:00:58 阅读更多 →
华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, …

2026/8/18 0:00:59 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →