JAVA并发编程AQS原理剖析

news2024/11/15 4:26:13

很多小朋友面试时候,面试官考察并发编程部分,都会被问:说一下AQS原理。面对并发编程基础和面试经验,专栏采用通俗简洁无废话无八股文方式,已陆续梳理分享了《一文看懂全部锁机制》、《JUC包之CAS原理》、《volatile核心原理》、《synchronized全能王的原理》,希望可以帮到大家巩固相关核心技术原理。今天我们聊聊AQS....

一、AQS是什么,有什么用

       AQS全称是:AbstractQueuedSynchronizer,队列同步器。这个类在JUC包java.util.concurrent.locks下面。

        一句话总结:AQS是FIFO先进先出双向队列,队列里存的是线程Thread。

       说到双向链表,这回大家就不陌生了。通过head、tail节点来记录队列的头和尾。每个Node节点都有next、pre来串联前后节点组成双向链表。

      AQS同步队列,就是通过在FIFO队列里存储线程的状态,实现类只需要extends abstractQueuedSynchronizer,并实现里面的方法,就可以自定义自己同步机制。为什么面试官喜欢问AQS,因为AQS队列同步器在JUC包里应用太广泛了,你所熟悉的ReentrantLock、Semaphore信号量、FutureTask,CountDownLatch,你翻一番源码,都是extend abstractQueuedSynchronizer去实现的。等你说完AQS原理,就可以继续问它的实现...面试官考察套路太深。

       一句话总结:AQS可以用来实现线程同步机制。在JUC包里有广泛应用。可以说AQS就是JUC的灵魂。

二、AQS的原理源码分析

        我们直接看源码说原理,AQS队列同步器核心三个变量:head节点、tail节点、state状态码。

       核心原理:队列中的每个节点对应一个线程。线程通过判断state字段进行抢占资源,如果获取资源成功,则把当前线程设置为有效工作线程,并且修改state值。其他竞争失败线程,就阻塞进入FIFO队列,等待持有锁线程按顺序唤醒。

        这个原理,不同锁实现会有些区别,具体AQS原理等我们在ReentrantLock,semaphore信号量,FutureTask专文再详细分析。

2.1 AQS Node节点分析

        AQS核心原理说过,AQS只有三个核心变量:head节点、tail节点、int state变量。state已经说过是volatile修饰,多线程入队前竞争锁的共享资源。队列里的Node,我们重点说说。先看源码截图,只看核心几个变量:

        首先看看Node类型字段的有:excusive,share,next,pre,nextWaiter。

exclusive:表示独占锁,只有一个线程可以获得锁。也就是我们在《一文看懂全部锁机制》说过独享锁、排它锁。比如ReentrantLock里面就是独占锁。FIFO里面的每个Node 都是exclusive 节点。

share:共享锁,多个线程可以共享锁。ReentrantReadWriteLock里面的read锁就是共享锁。

pre和 next 就是表示当前Node节点前、后节点引用。 thread: 就是对应线程引用。

waitSatus: 就是当前线程节点等待状态,0就是默认值。它的值有:

          CANCELLED:节点在等待过程被打断或超时,被标记为取消状态。

          SIGNAL:线程等待被唤醒。

          CONDITION:在条件队列中等待。

          PROPAGATE: 释放共享锁时,如果头结点的状态是PROPAGATE状态,就广播我释放锁了,等待锁的线程,都可以去尝试获取锁。

AQS因为不涉及具体实现,简单说这么多,下一篇,我们将分享具体AQS实现的庖丁解牛。比如ReentrantLock,信号量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2121976.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pgAdmin4使用

文章目录 配置表主键-自增序列 配置表主键-自增序列 1、左侧找到Sequences,右键新增. 填入Name:表名_id_seq 2、在定义中,填入自增量、开始、最小值、最大值。 选择对应的表和字段。 3、左侧表-属性,配置ID字段 Default 为 刚…

【Petri网导论学习笔记】Petri网导论入门学习(一)

Petri 网导论 如需学习转载请注明原作者并附本帖链接!!! 如需学习转载请注明原作者并附本帖链接!!! 如需学习转载请注明原作者并附本帖链接!!! 发现网上关于Petri网的学习…

基于Neo4j知识图谱的构建及可视化

基于Neo4j知识图谱的构建及可视化 前言 手把手教你基于Neo4j构建知识图谱可视化系统。有任何疑问或者需要提供帮助都可以私信我。 一、环境搭建 1.1 安装JDK 下载和安装Neo4j之前,首先必须 安装Java JDK,因为Neo4j是基于Java的图形数据库&#xff0c…

openharmony 应用支持常驻和自启动

本文环境: devEco studio 版本 4.0.0.600 SDK版本:3.2.12.5 full SDK 应用模型:Stage 功能简介: OpenHarmony支持包含ServiceExtensionAbility类型模块的应用配置常驻和自启动。 关于ServiceExtensionAbility其他的介绍可以参考官网:ServiceExtensionAbility(仅对…

深入解析 org.apache.maven.plugins

深入解析 org.apache.maven.plugins 文章目录 一、常见报错问题二、解决思路三、解决方法四、常见场景分析五、扩展与高级技巧 一、常见报错问题 在使用org.apache.maven.plugins的过程中,我们可能会遇到一些常见的报错问题。例如,插件版本冲突、依赖缺失…

【linux-Day1】安装Centos

【linux-Day1】安装Centos Linux档案安装Centos购买云服务器下载xshell 小小体验一下centos!以root身份登录centos新建账户并给该账户设置密码以xxx用户登录centos删除选定账号 小结一下~ Linux档案 诞生背景:21岁的蕾娜斯.拖瓦茨在赫尔辛基大学读书期间…

无人机之陀螺仪篇

无人机的陀螺仪是无人机系统中至关重要的一个组成部分,它基于旋转惯性力的陀螺效应,通过测量旋转物体的角速度信息来实现对无人机姿态的精确控制。以下是对无人机陀螺仪的详细解析: 一、无人机陀螺仪的原理 旋转惯性力原理:无人机…

828华为云征文|docker部署ollama搭建属于自己的大模型

1.介绍 1.1 什么是华为云Flexus X实例 最近华为云828 B2B企业节正在举办,Flexus X实例的促销也非常给力,大家可以去看看。特别是对算力性能有要求,同时对自建MySQL、Redis、Nginx性能有要求的小伙伴,千万不要错过。 Flexus云服务…

螺旋模型例题

答案:D 知识点:螺旋模型是瀑布模型和演化模型的结合。适用于庞大,复杂并且具有高风险的系统 螺旋模型阶段: 制定计划:决定目标,方案和限制 风险分析:评价方案,识别风险&#xff…

简单好用的OCR API

现如今,越来越多的科技产品可以帮助我们改善和提高相应的工作效率。OCR技术的出现,提高了人们的工作效率,其应用领域及其广泛。就拿应用了OCR技术的翔云文档识别服务来说,只需上传文档图片便可自动识别并返回文档中相应的内容。翔…

vue2 - 文件预览、下载

目标&#xff1a;显示附件文件名&#xff0c;多个文件则用顿号隔开&#xff0c;点击文件可预览或下载文件 支持预览 pdf 和图片 &#xff08;JPG, JPEG, PNG&#xff09;doc、docx文件支持下载 原型图&#xff1a; 实现&#xff1a; 1、附件信息实现&#xff1a; <!-- 附…

Modbus协议基础知识

本节内容视频链接&#xff1a;【1】Modbus协议基础知识_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV11G4y1W7pU?p1&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5

强化学习策略更新方法on-policy与off-policy(重要性采样,q-Learning,sarsa)

一 On-policy和Off-policy概念 策略更新方法可以分为两类&#xff1a;On-policy&#xff08;在线策略&#xff09;和Off-policy&#xff08;离线策略&#xff09;。 它们之间的主要区别在于如何使用经验&#xff08;状态、动作、奖励和下一个状态&#xff09;来更新智能体的策略…

PHP宠物爱好者交流网站-计算机毕业设计源码65481

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 注册流程 2.2.1 登录流程 2.2.3 数据删除流程 2.3 系统功能分析 2.4 系统用例分析 3 系统总体设计 3.1 系统架构设计 3.2 系统功能模块设…

跑腿代购app系统开发产品分析

跑腿代购APP的开发案例分析可以从多个维度进行&#xff0c;包括市场需求、功能设计、技术实现、用户体验以及市场推广等方面。编辑&#xff1a;qawsed2466。以下是一个基于当前行业趋势和技术发展的跑腿代购APP开发案例分析概要&#xff1a; 一、市场需求分析 1. 用户群体 忙…

01【python+playwright测试自动化】之定位方式

playwright系列文章目录 00Mac安装playwright 00Mac 安装配置Python3虚拟环境&#xff08;VirtualEnv、virtualenvwrapper扩展包&#xff09; 文章目录 playwright系列文章目录前言一、实现一个demo二、通过CSS、XPath定位三、通过文本定位四、通过角色定位五、通过标题定位六…

【最新推荐】雨林木风Windows10系统:极速下载!

今日系统之家小编给大家分享2024年最新发布的雨林木风Windows10系统下载&#xff0c;该版本系统基于微软官方最新Windows10 22H2 19045.4842 64位专业版展开离线制作&#xff0c;确保安全无毒&#xff0c;全新升级的优化方案&#xff0c;显著提升了系统的性能&#xff0c;运作变…

新能源汽车的充电基础发展规划

公共充电基础设施建设进展 公共充电基础设施作为新能源汽车发展的关键支撑&#xff0c;其建设进展在近年来显著加快。各地和企业纷纷投入资源&#xff0c;建立了大量的充电站和充电桩。这些设施不仅覆盖了城市主要区域&#xff0c;也逐渐扩展到高速公路服务区和城际连接点。除…

机器学习 第10章 降维与度量学习

目录 k近邻学习低维嵌入主成分分析&#xff08;PCA&#xff09;核化线性降维&#xff08;KPCA&#xff09;流形学习等度量映射&#xff08;Isomap&#xff09;局部线性嵌入 度量学习 k近邻学习 k 近邻&#xff08;KNN&#xff09;学习是一种常用的监督学习方法&#xff0c;其工…

太炸裂!AI绘画赚钱机会,多到你无法想象!

家人们&#xff0c;AI绘画带来的变现方式真的太多了&#xff01; 很多人会认为AI还没有落地&#xff0c;也有很多人认为这些宣扬AI红利的自媒体就是想割韭菜&#xff0c;那只能说可能认知太浅薄了。 新的事物出现&#xff0c;总会有善于捕捉信息和透过表层看清事物本质的人冲在…