AbstractQueuedSynchronizer---AQS

AQS:抽象的队列同步器

  是用来构建锁或者其它同步器组件的重量级基础框架及整个UC体系的基石,通过内置的FO队列来完成资源获取线程的排队工作,并通过一个int类型变量表示持有锁的状态;

 

AQS为什么是JUC内容中最重要的基石?

在juc下countDownLatch、Semaphore、CyclicBarrier、ReentrantLock、ReentrantReadWriteLock、、、等等类中都是用AQS来实现;

 

能干嘛?

 

 

初步了解AQS:

  AQS使用一个 volatile 的int类型的成员变量来表示同步状态,通过内置的FIFO队列来完成资源获取的排队工作将每条要去抢占资源的线程封装成一个Node节点来实现锁的分配,通过CAS完成对State值的修改。

  

AQS自身:(State变量 + CLH双向队列)

  1、AQS的同步状态 State 成员变量:

    private volatile int state;

  2、AQS的CLH队列:

    CLH队列为一个是双向队列;(CLH为三个人名的缩写)

    private transient volatile Node head;//头节点

    private transient volatile Node tail;//尾节点

 

AQS内部类 Node:

  volatile int waitStatus;//Node的等待状态成员变量

  volatile Node prev;//前节点

  volatile Node next;//后节点

  volatile Thread thread;

 

 

AQS基本结构:

 

 

Lock接口的实现类,基本都是通过聚合了一个队列同步器的子类完成线程访问控制的;

posted @ 2021-04-19 10:05  DHaiLin  阅读(54)  评论(0编辑  收藏  举报