关于AbstractQueuedSynchronizer(AQS)的简单理解
来源:互联网 发布:it服务外包 编辑:程序博客网 时间:2024/06/05 11:40
java.util.concurrent.locks.AbstractQueuedSynchronizer(简称AQS),从名字(抽象队列同步器)直接来理解它的作用就差不多了。作为程序员是很少直接使用它的。它是并发包中所有使用cas乐观锁实现的所有同步器的基类,这些同步器包括ReentrantLock,ReadWriteLock,Semaphore,CountdownLatch,CyclicBarrier等。
AQS应用state机制来实现同步机制.在源代码中提供 volatile 变量 state; 用于同步线程之间的共享状态。通过 CAS 和 volatile 保证其原子性和可见性。AQS即可以实现独占锁,也可以实现共享锁(ReadWriteLock中的WriteLock,ReadLock)。但是在其子类的实现中都只是实现了其一个方面,要么是独占锁,要么是共享锁。这也体现了类的设计的单一职责原则,对于功能设计太复杂带来的只能是灾难。
AQS底层调用sun.misc.Unsafe,而sun.misc.Unsafe帮我们实现cas原语所表示的并发原子操作。sun.misc.Unsafe 它直接调用C实现的native方法。
它们的调用关系如下:操作系统实现cas原语的并发操作指令<---sun.misc.Unsafe<---LockSupport<---AQS <---ReentrantLock
关于AQS的详细功能,可以直接参看代码实现,也可以参看并发编程网站上关于它的解释,它的逻辑并不难,只是有点绕,需要点耐心。
阅读全文
0 0
- 关于AbstractQueuedSynchronizer(AQS)的简单理解
- 关于AQS(AbstractQueuedSynchronizer)中对中断的应用
- AbstractQueuedSynchronizer(AQS)
- AbstractQueuedSynchronizer(AQS)
- AQS(AbstractQueuedSynchronizer)源码分析
- JUC - AbstractQueuedSynchronizer(AQS) 源码分析
- AbstractQueuedSynchronizer(AQS)源码解析上
- AbstractQueuedSynchronizer(AQS)源码解析下
- AbstractQueuedSynchronizer(AQS)源码解析-续
- AbstractQueuedSynchronizer理解
- 关于AQS的学习(一)
- 关于AQS的一点总结
- AbstractQueuedSynchronizer(AQS)源码解析(一)
- AbstractQueuedSynchronizer/AQS 使用拓展分析-优
- 【Java并发】- AbstractQueuedSynchronizer详解(AQS)
- Lock实现之AbstractQueuedSynchronizer——AQS
- java中的队列同步器AQS -- AbstractQueuedSynchronizer
- 对于队列同步器AbstractQueuedSynchronizer的理解
- spring boot 自学笔记(三) Redis集成—RedisTemplate
- 使用心理学推理出对方QQ空间的问题答案,非常给力哦!
- Kotlin开源项目--Kotlin_try
- PHP笔试题
- 《软技能:代码之外的生存指南》
- 关于AbstractQueuedSynchronizer(AQS)的简单理解
- Zookeeper学习笔记(二)通过Java API调用Zookeeper
- php扩展开发
- C初始化字符串指针和二维字符数组
- jQuery--记事
- Heap的Array实现法
- Linux select服务器
- Java通过jersey实现客户端图片上传示例
- 每日MySQL之001:MySQL在SUSE Linux下的安装