说说你对AQS的理解?
分析&回答
AQS就是一个并发包的基础组件,用来实现各种锁,各种同步组件的。它包含了state变量、加锁线程、等待队列等并发中的核心组件。
AQS对象内部维护了一个volatile int state(代表共享资源)和一个FIFO线程等待队列(多线程争用资源被阻塞时会进入此队列)。state代表了加锁的状态。加锁 state ++ 释放锁state – 。如下图:
AQS定义两种资源共享方式:Exclusive(独占,只有一个线程能执行,如ReentrantLock)和Share(共享,多个线程可同时执行,如Semaphore/CountDownLatch)。不同的自定义同步器争用共享资源的方式也不同。自定义同步器在实现时只需要实现共享资源state的获取与释放方式即可,至于具体线程等待队列的维护(如获取资源失败入队/唤醒出队等),AQS已经在顶层实现好了。
反思&扩展
有了AQS的顶层实现,我们再实现锁的时候方式基本都差不多,不同的地方就在获取-释放资源的方式tryAcquire-tryRelelase。
说说AQS中的独占锁
说说AQS中的共享锁
刷刷面试:一站式解决面试问题,如有好的面试知识或技巧期待您的共享!
说说你对AQS的理解?相关推荐
- AQS理解之五—并发编程中AQS的理解
AQS理解之五-并发编程中AQS的理解 首先看下uml类图: AbstractOwnableSynchronizer 这个类定义是提供一个创建锁的基础,设置一个排它线程,帮助控制和监控访问. 先看下A ...
- java基础-CAS、synchronized和AQS的理解
乐观锁与悲观锁的区别? 悲观锁 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程 ...
- 请简短说明一下你对AQS的理解
AQS其实就是一个可以给我们实现锁的框架 内部实现的关键是:先进先出的队列.state状态 定义了内部类ConditionObject 拥有两种线程模式独占模式和共享模式. 在LOCK包中的相关锁(常 ...
- Java 并发高频面试题:聊聊你对 AQS 的理解?
深入浅出AbstractQueuedSynchronizer 有情怀,有干货,微信搜索[三太子敖丙]关注这个有一点点东西的程序员. 本文 GitHub https://github.com/JavaF ...
- 什么是CAS和AQS
什么是CAS和AQS CAS理解 概念 ABA 问题 AQS理解 获取同步状态 AQS源码分析 获取锁 释放锁 CAS是一种乐观锁,通过在修改数据时,通过和原来的值进行比较,判断是否有被其他人改变.然 ...
- 并发容器J.U.C -- AQS组件(一)
AQS简介 AQS全名:AbstractQueuedSynchronizer,是并发容器J.U.C(java.lang.concurrent)下locks包内的一个类.它实现了一个FIFO的队列.底层 ...
- AQS排它锁的获取acquire、释放release详解
大量源码注释警告,请耐心阅读 AQS 实现了代码块的并发控制,通过内置的FIFO双向队列来完成线程的排队工作 基于模板方法模式设计,因此子类只需对五个方法,进行部分重写 4个try:{独占 | 共享} ...
- 倒排索引原理_拜托,面试请不要再问我分布式搜索引擎的架构原理!
欢迎关注头条号:石杉的架构笔记 周一至周五早八点半!精品技术文章准时送上!!! 精品学习资料获取通道,参见文末 目录 (1)倒排索引到底是啥? (2)什么叫分布式搜索引擎? (3)ElasticSea ...
- java并发核心知识体系精讲_JAVA核心知识汇总
双非同学如何逆袭大厂? 在互联网行业,入行的第一份工作很大程度上决定了以后职业发展的高度.有些双非的同学认为自己校招进不了大厂以后还会有社招,这种想法很危险.大厂的社招,大多数都只招大厂的员工.什么意 ...
最新文章
- 2020 年了,深度学习接下来到底该怎么走?
- spring Transaction Propagation 事务传播
- oracle delete原理,如何恢复并理解oracle删除数据的原理
- Linux系统高可用集群软件之Keepalived
- 10种CSS3实现的Loading效果
- 20165234 《Java程序设计》第六周学习总结
- 什么是 constructor signature in interface
- RabbitMQ学习3----运行和管理RabbitMQ
- 2020牛客国庆集训派对day4 What Goes Up Must Come Down
- 团队项目冲刺第一阶段03
- 随想录(对比着c学java)
- 【NOIP2004】【Luogu1085】不高兴的津津
- ShadowGun代码
- 计算机网络上有个红叉没无线,如果计算机的无线网络上出现红叉指示连接不正确,该怎么办| WIFI显示红叉...
- #35 insert
- 实对称矩阵的一些性质(不包含证明)
- 没有比这个更详细的Elasticsearch教程
- 怎样让小孩变成机灵顾客
- 第二证券|钠电池三种技术路线谁更将率先取代锂电池?
- 录屏神器Bandicam 4.34.1503学习版