併發-AQS

打怪升級中...發表於2020-10-26

今天聊下我理解的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上加新節點的

相關文章