AQS
Abstract Queued Synchronizer,抽象队列同步器,它是构建锁或其他同步组件的基础框架。(是JUC中提供的一种锁机制)
AQS 与Synchronized的区别
- Synchronized
- 关键字,由C++语言实现
- 悲观锁,自动释放锁
- 锁竞争激烈都是重量级锁,性能差
- AQS
- Java语言实现
- 悲观锁,手动开启和关闭
- 锁竞争激烈情况下,提供了多种解决方案
AQS 基本工作机制
AQS可以是公平锁,也可以是非公平锁
- 新的线程与队列中的线程共同抢资源,是非公平锁
- 新的队列到线程中等待,只让队列中的head线程获取锁,是公平锁
什么是AQS?
- 是多线程中的队列同步器,是一种锁机制,它是一个基础框架,像ReetrantLock、Semaphore都是基于AQS实现的
- AQS内部维护了一个先进先出的双向队列,队列中存储着排队的线程
- AQS内部有一个volatile修饰属性变量state,这个state就是一个是否获取锁的标志。如果一个线程修改state为1成功了,则表示该线程获取了锁
- 在对state修改时使用CAS操作,保证多个线程修改的原子性