Java同步器AQS

Posted june0816

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于Java同步器AQS的主要内容,如果未能解决你的问题,请参考以下文章

Java并发框架——AQS之怎样使用AQS构建同步器

[Java并发] AQS抽象队列同步器源码解析--锁获取过程

源码级深挖AQS队列同步器

AQS同步队列器之一:介绍以及简单使用

Java AQS源码阅读

队列同步器——AQS