并发-AQS

今天聊下我理解的AQS

主要从是什么、数据结构、原理三个点说一下

一. 是什么
    AQS是JUC.Locks包下的一个抽象类 AbstractQueueSynchronizer
    使用的设计模式是TemplateMethod 模板方法又叫钩子函数
    (AQS设计方法,具体的实现由子类来实现)

二. 数据结构
    AQS 是 volitile int state  +  Queue (是个双向链表)
    1. state 的具体含义由它的子类来决定 
        例如:
    		ReentranLock中 state 表示获取锁线程的重入次数。
    		CountDownLanth 中 state表示初始化时的值
    2. Queue 是一个双向链表
        包含 head (指向获得state的线程)、 prev、 tail、 thred(等待的线程)等
        Thred 等待并试图获取state的控制权
        
 三. 原理是volitile + CAS
 	1. volitile: 
 		AQS主要的属性都是用volitile修饰的 
 		如:volitile state、 volitile tail、volitile head
    2.CAS
      AQS 是通过CompareAndSetState() 来操作state属性。
      AQS 是通过CompareAndSetTail()方法来往尾巴tail上加新节点的
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页