分析&回答


AQS就是一个并发包的基础组件,用来实现各种锁,各种同步组件的。它包含了state变量、加锁线程、等待队列等并发中的核心组件。

AQS对象内部维护了一个volatile int state(代表共享资源)和一个FIFO线程等待队列(多线程争用资源被阻塞时会进入此队列)。state代表了加锁的状态。加锁 state ++ 释放锁state – 。如下图:

AQS定义两种资源共享方式:Exclusive(独占,只有一个线程能执行,如ReentrantLock)和Share(共享,多个线程可同时执行,如Semaphore/CountDownLatch)。不同的自定义同步器争用共享资源的方式也不同。自定义同步器在实现时只需要实现共享资源state的获取与释放方式即可,至于具体线程等待队列的维护(如获取资源失败入队/唤醒出队等),AQS已经在顶层实现好了。

反思&扩展


有了AQS的顶层实现,我们再实现锁的时候方式基本都差不多,不同的地方就在获取-释放资源的方式tryAcquire-tryRelelase。

说说AQS中的独占锁

说说AQS中的共享锁


刷刷面试:一站式解决面试问题,如有好的面试知识或技巧期待您的共享!

说说你对AQS的理解?相关推荐

  1. AQS理解之五—并发编程中AQS的理解

    AQS理解之五-并发编程中AQS的理解 首先看下uml类图: AbstractOwnableSynchronizer 这个类定义是提供一个创建锁的基础,设置一个排它线程,帮助控制和监控访问. 先看下A ...

  2. java基础-CAS、synchronized和AQS的理解

    乐观锁与悲观锁的区别? 悲观锁 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程 ...

  3. 请简短说明一下你对AQS的理解

    AQS其实就是一个可以给我们实现锁的框架 内部实现的关键是:先进先出的队列.state状态 定义了内部类ConditionObject 拥有两种线程模式独占模式和共享模式. 在LOCK包中的相关锁(常 ...

  4. Java 并发高频面试题:聊聊你对 AQS 的理解?

    深入浅出AbstractQueuedSynchronizer 有情怀,有干货,微信搜索[三太子敖丙]关注这个有一点点东西的程序员. 本文 GitHub https://github.com/JavaF ...

  5. 什么是CAS和AQS

    什么是CAS和AQS CAS理解 概念 ABA 问题 AQS理解 获取同步状态 AQS源码分析 获取锁 释放锁 CAS是一种乐观锁,通过在修改数据时,通过和原来的值进行比较,判断是否有被其他人改变.然 ...

  6. 并发容器J.U.C -- AQS组件(一)

    AQS简介 AQS全名:AbstractQueuedSynchronizer,是并发容器J.U.C(java.lang.concurrent)下locks包内的一个类.它实现了一个FIFO的队列.底层 ...

  7. AQS排它锁的获取acquire、释放release详解

    大量源码注释警告,请耐心阅读 AQS 实现了代码块的并发控制,通过内置的FIFO双向队列来完成线程的排队工作 基于模板方法模式设计,因此子类只需对五个方法,进行部分重写 4个try:{独占 | 共享} ...

  8. 倒排索引原理_拜托,面试请不要再问我分布式搜索引擎的架构原理!

    欢迎关注头条号:石杉的架构笔记 周一至周五早八点半!精品技术文章准时送上!!! 精品学习资料获取通道,参见文末 目录 (1)倒排索引到底是啥? (2)什么叫分布式搜索引擎? (3)ElasticSea ...

  9. java并发核心知识体系精讲_JAVA核心知识汇总

    双非同学如何逆袭大厂? 在互联网行业,入行的第一份工作很大程度上决定了以后职业发展的高度.有些双非的同学认为自己校招进不了大厂以后还会有社招,这种想法很危险.大厂的社招,大多数都只招大厂的员工.什么意 ...

最新文章

  1. 2020 年了,深度学习接下来到底该怎么走?
  2. spring Transaction Propagation 事务传播
  3. oracle delete原理,如何恢复并理解oracle删除数据的原理
  4. Linux系统高可用集群软件之Keepalived
  5. 10种CSS3实现的Loading效果
  6. 20165234 《Java程序设计》第六周学习总结
  7. 什么是 constructor signature in interface
  8. RabbitMQ学习3----运行和管理RabbitMQ
  9. 2020牛客国庆集训派对day4 What Goes Up Must Come Down
  10. 团队项目冲刺第一阶段03
  11. 随想录(对比着c学java)
  12. 【NOIP2004】【Luogu1085】不高兴的津津
  13. ShadowGun代码
  14. 计算机网络上有个红叉没无线,如果计算机的无线网络上出现红叉指示连接不正确,该怎么办| WIFI显示红叉...
  15. #35 insert
  16. 实对称矩阵的一些性质(不包含证明)
  17. 没有比这个更详细的Elasticsearch教程
  18. 怎样让小孩变成机灵顾客
  19. 第二证券|钠电池三种技术路线谁更将率先取代锂电池?
  20. 录屏神器Bandicam 4.34.1503学习版

热门文章

  1. 计算机怎样发现路由器上u盘,360 P2 无线路由器通过电脑终端查看路由USB存储设备操作流程 路由器...
  2. 关于cox单因素与多因素分析
  3. CENTOS上的网络安全工具(十二)走向Hadoop(4) Hadoop 集群搭建
  4. 查看表空间和解决表空间扩容ORA-01119:ORA-27040问题
  5. 零钱兑换(完全背包)
  6. 16个经典面试问题回答思路
  7. 杨忠国老师专家点评:全球5G手机销量榜出炉
  8. 灰度图转换成彩色图和彩虹图
  9. 游戏开发中常用的算法
  10. 服务器搭建邮件自动回复,爆笑的邮件自动回复内容,邮件自动回复心理