Java同步器AQS

一、概念

1. AQS(AbstractQueuedSynchronizer),抽象队列式同步器,在java.util.concurrent.locks(JUC)包下,是除了Java自带的synchronized关键字之外的锁机制

2. AQS机制:如果请求的资源被其他线程锁定,将当前线程加入等待队列中

3. 在java.util.concurrent(JUC)包下,多种同步和并发类的实现基于AQS

二、原理

1. CLH队列:一个虚拟的双向队列,不存在队列实例,仅存在节点之间的关联关系,用双向链表实现

2. AQS将每一个线程封装成节点,加入CLH队列中等待获取锁

3. 每个线程使用CAS去修改volatile修饰的共享变量state,修改成功则获取锁成功,否则进入等待队列,然后FIFO先进先出

private volatile int state; //0表示lock,1表示unlock

4. AQS是自旋锁,即当锁被别的线程获取的时候,当前线程循环等待

三、AQS功能

1. 实现独占锁:只有一个线程能访问,例如ReentrantLock

2. 实现共享锁:多个线程可以同时访问,例如Semaphore

3. 实现Condition模型

参考:

https://blog.csdn.net/mulinsen77/article/details/84583716

https://cloud.tencent.com/developer/article/1449175

猜你喜欢

转载自www.cnblogs.com/june0816/p/11604216.html