位置: IT常识 - 正文

并发基础之AQS(并发操作的定义)

编辑:rootadmin
并发基础之AQS

目录

什么AQS

AQS原理

重点1:CLH队列​

重点2:state 状态

AQS 两种资源共享方式

1) Exclusive(独占)

2) Share(共享)

AQS 模板方法运用

补充知识CAS

CAS的优点

CAS的缺点

缺点解决办法

总结


什么AQS

推荐整理分享并发基础之AQS(并发操作的定义),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:并发api,并发操作的定义,并发设计,并发操作的三类问题,并发算法,并发算法,并发技术,并发的基础,内容如对您有帮助,希望把文章链接给更多的朋友!

AQS是位于java.util.concurrent.locks 包下的 AbstractQueuedSynchronizer类,是构建同步器和锁的基础框架。我们可以通过继承AbstractQueuedSynchronizer 创建自己的同步器。比如我们常用的JUC并发包下面的CountDownLatch、ReentrantLock、Semaphore等等都是源于AQS实现的并发工具类。

AQS原理

核心思想是多个线程访问共享资源,如果一个线程发现共享资源没有被占用,则将资源设定为锁定状态且当前线程设为占用线程,如果一个线程发现共享资源已经被占用,则需要等待占用线程释放资源,当然当占用线程释放资源的时候AQS会通知其他等待线程进行资源抢占。在AQS实际源码中是通过state 状态在标识资源是否占用,通过CLH FIFO虚拟双向队列来实现将最近的等待线程放在队列末尾。

重点1:CLH队列

如图所示CLH是一个虚拟的双向队列,是通过state的值实现线程等待排序在队列末尾。队列head 头部是当前资源占用工作线程,node1-node n 则是资源被锁定后等待的线程节点。在实际的资源占用过程中,根据是否公平锁来确定是顺序占用资源和抢占式占用资源。

重点2:state 状态

如上图所示,线程获取资源是否被占用是通过获取 state 状态来实现。AQS源码已经给出获取、设置、通过CAS修改state 的方法。此时我们可以理解为:

 1、线程获取state 发现为 0 ,说明没有线程占用则占用该资源,并通过CAS将state 置为 1

2、如果该线程有重入的情况则继续增加state 的值,重入几次就增加几次

3、线程出方法则需要释放state值,也就是减少state

4、当state值为0 的时候标识线程执行完毕解除占用,此时AQS唤醒其他线程可以占用资源

AQS 两种资源共享方式1) Exclusive(独占)

只有一个线程能执行,如 ReentrantLock。又可分为公平锁和非公平锁,ReentrantLock 同时支持两种锁。根据ReentrantLock定义,我们可知公平锁是根据队列的等待顺序占用资源,非公平锁是所有的等待线程抢占资源。

2) Share(共享)

运行多个线程对资源共享,比如JUC并发工具CountDownLatch、Semaphore等都是运行多个线程访问资源。

AQS 模板方法运用并发基础之AQS(并发操作的定义)

AQS内置很多的操作方法,比如获取锁 tryAcquire()、释放锁 tryRelease()、超时获取tryAcquireNanos()、响应中断 acquireInterruptibly()等操作方法

在实际的运用过程中,我们可以直接继承AQS从而轻易的获取这些方法来实现我们的同步器。

当前JUC下的并发工具类都是基于AQS来实现自己的功能的,我们现在来鉴赏一下。

比如可重入锁ReentrantLock,我们进入源码查看,ReentrantLock内部类继承AQS:

我们ReentrantLock超时获取锁/释放锁也都是调用AQS超时获取锁/释放锁的方法:

当然其他对资源状态和队列的操作方法都是基于AQS实现的,对于JUC中其他的并发工具类也是如此,都是基于AQS实现。

补充知识CAS

CAS是Compare and Swap 的缩写,也就是比较和替换,是JUC最核心最基础的理论。原理是基于三个数据 主存值V、线程副本值A、需要修改为值B。当且仅当主存值V等于线程副本值A的时候,才能将数据修改为B。

CAS的优点

CAS是乐观锁,且一直自旋等待锁,所以性能很高。

CAS的缺点

ABA问题,如果我们先将值C修改为D,再修改为C,CAS会认为此数据没有修改。

缺点解决办法

1、加版本号

2、JAVA JUC atomic下提供AtomicStampedReference包装类

总结

AQS是位于java.util.concurrent.locks 包下的 AbstractQueuedSynchronizer类,是构建同步器和锁的基础框架。JAVA JUC并发包下的工具类都是基于AQS实现,其原理都是通过state状态来确定线程是否占用资源,未拿到锁的线程则放置在CLH虚拟双向队列末尾,后续通过AQS通知抢占资源。

本文链接地址:https://www.jiuchutong.com/zhishi/300110.html 转载请保留说明!

上一篇:【HTML | CSS】春节将至,为网页挂上精美的灯笼吧(附源码)程序员的浪漫(_ html)

下一篇:人工智能助力古彝文识别,推动传统文化传承(人工智能助力中国创新发展)

  • 哈啰出行顺风车车主怎么接单(哈啰出行顺风车独享是什么意思)

    哈啰出行顺风车车主怎么接单(哈啰出行顺风车独享是什么意思)

  • qq屏幕分享可以看到彼此脸吗(qq屏幕分享可以看到微信吗)

    qq屏幕分享可以看到彼此脸吗(qq屏幕分享可以看到微信吗)

  • 小米10usb调试在哪里(小米10xusb调试在哪里)

    小米10usb调试在哪里(小米10xusb调试在哪里)

  • 电脑桌面文件变大怎么调小(电脑桌面文件变大怎么缩小)

    电脑桌面文件变大怎么调小(电脑桌面文件变大怎么缩小)

  • 小米有品映趣是小米的吗(小米有品映趣电动剃须刀怎么样)

    小米有品映趣是小米的吗(小米有品映趣电动剃须刀怎么样)

  • 微信pc版频繁登录掉线(微信登电脑一直频繁掉线怎么弄)

    微信pc版频繁登录掉线(微信登电脑一直频繁掉线怎么弄)

  • 华为屏幕最大的手机型号(华为屏幕最大的手机)

    华为屏幕最大的手机型号(华为屏幕最大的手机)

  • 快手极速版为什么金币不转了(快手极速版为什么总是自动下载软件)

    快手极速版为什么金币不转了(快手极速版为什么总是自动下载软件)

  • 华为桌面锁定怎么解除(华为桌面锁定怎么设置)

    华为桌面锁定怎么解除(华为桌面锁定怎么设置)

  • 计算机网络硬件包括(计算机网络硬件有哪些)

    计算机网络硬件包括(计算机网络硬件有哪些)

  • 苹果home键按三下屏幕变暗(苹果home键三下设置)

    苹果home键按三下屏幕变暗(苹果home键三下设置)

  • OceanBase基于什么开发的(oceanbase基于什么数据库)

    OceanBase基于什么开发的(oceanbase基于什么数据库)

  • u盘寿命一般多久(u盘寿命到了会发生什么)

    u盘寿命一般多久(u盘寿命到了会发生什么)

  • 共享联系人是什么意思(共享联系人是怎么回事)

    共享联系人是什么意思(共享联系人是怎么回事)

  • 华为p40的隐藏空间怎么打开(华为p40隐藏挖空)

    华为p40的隐藏空间怎么打开(华为p40隐藏挖空)

  • 电信卡只有2g网咋回事(电信卡只有2g网咋回事电话能打没有流量)

    电信卡只有2g网咋回事(电信卡只有2g网咋回事电话能打没有流量)

  • 手机屏幕出现彩色条纹怎么自修(手机屏幕出现彩色竖线还能用多久)

    手机屏幕出现彩色条纹怎么自修(手机屏幕出现彩色竖线还能用多久)

  • qq潜水怎么改(qq的潜水是什么意思)

    qq潜水怎么改(qq的潜水是什么意思)

  • qq卸载后聊天记录还有吗(qq卸载聊天记录怎么找回来)

    qq卸载后聊天记录还有吗(qq卸载聊天记录怎么找回来)

  • 电脑主机声音大嗡嗡响是怎么回事(电脑主机声音大嗡嗡响显示器黑屏)

    电脑主机声音大嗡嗡响是怎么回事(电脑主机声音大嗡嗡响显示器黑屏)

  • 华为p30和p30pro外观区别(华为p30和p30pro外观一样吗)

    华为p30和p30pro外观区别(华为p30和p30pro外观一样吗)

  • 怎样用qq发视频给对方(怎样用qq发视频给别人)

    怎样用qq发视频给对方(怎样用qq发视频给别人)

  • 亲情关怀为什么登入不了(亲情关怀为什么别人的手机界面在我这边是黑的)

    亲情关怀为什么登入不了(亲情关怀为什么别人的手机界面在我这边是黑的)

  • 微信群里怎么创建接龙表格(微信群里怎么创建小程序)

    微信群里怎么创建接龙表格(微信群里怎么创建小程序)

  • 优酷怎么取消自动续费(优酷怎么取消自动扣费服务)

    优酷怎么取消自动续费(优酷怎么取消自动扣费服务)

  • chatpdf使用说明(chat form)

    chatpdf使用说明(chat form)

  • CSS页面布局(超详解)(div css页面布局)

    CSS页面布局(超详解)(div css页面布局)

  • 金融资产交易增值税
  • 按适用税率征税销售额等于销售收入吗
  • 留抵退税手续
  • 回购股票为什么股价下跌
  • 支付电费未开具发票
  • 小规模城建税和教育费附加怎么算
  • 以前年度损益调整结转到哪里
  • 减免税款借贷方表示
  • 企业所得税申报时间
  • 本年利润每个月都转吗
  • 未过户的车辆对车辆影响
  • 小规模纳税人企业所得税起征点
  • 财务报税表格
  • 定额备用金补付会计分录怎么写?
  • 公司收到现金货款需要存入银行吗
  • 写字楼出租流程
  • 房屋维修专用发票图片
  • 公司购买住宅可以分期付款吗
  • 劳务建筑公司一年可以赚多少
  • 实收资本未注明投资款
  • 实收资本增加印花税缴纳时间
  • 公积金贷款利息现在是多少
  • 安全生产费怎么算
  • 银行现金日记账表格
  • 不动产广告位出租税率是多少
  • 进口货物如何缴增值税
  • 公司贷款收入如何计算
  • 培训费发票模板
  • linux zen3
  • php提高性能
  • PHP:pg_last_notice()的用法_PostgreSQL函数
  • PHP:pg_escape_bytea()的用法_PostgreSQL函数
  • 登记会计账簿的注意事项
  • 栀子花叶子发黄是什么原因
  • 今天端午节是几月几号啊
  • laravel auth:api
  • PHP curl 或 file_get_contents 获取需要授权页面的方法
  • vue 提示
  • 前端将base64图片转换成file文件
  • 如何使用axios直接发送GET请求
  • php生成guid
  • 人力为主的公司名称
  • 固定资产加速折旧是什么意思
  • 民办非企业性质还是商业性质吗
  • 子公司分公司和办事处账务上的区别有哪些
  • 货物入库会计分录怎么做
  • 年末结转增值税明细
  • 研发费用没有发票怎么做账
  • 设备计提折旧从什么时候开始
  • mongodb 合并数据库
  • 财政收回用款额度
  • 个体工商户开具房屋租赁发票
  • 房地产开发企业会计制度
  • 单位保险柜里都放些什么
  • 法人投资属于什么会计科目
  • 土地出让金印花税减半政策
  • 公益性捐赠全额扣除,企业所得税
  • 外购入库暂估补差单
  • 工程施工发生的酒水费会计分录
  • 营改增租赁服务有哪些
  • 建账是不是只需要科目余额表
  • 总分类账的依据
  • 商品流通企业有哪些企业
  • 工业企业增值税负率一般控制在多少
  • sql2008数据库置疑
  • 怎么处理鲍鱼
  • linux系统检测
  • u大师教程
  • win8.1安装应用商店
  • 如何解决win7系统转为xp系统出现蓝屏怎么办啊
  • [置顶] 关于在vs2013中配置opengl红宝书第八版环境
  • 我的第一个师父读后感
  • linux pop
  • js indexof 对象
  • python怎么用数组
  • js继承的方法
  • 浙江省网上税务局app下载
  • 代发工资法律依据
  • 杭州市税务局总局地址
  • 商品房开超市
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设