併發-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上加新節點的
相關文章
- JDK併發AQS系列(三)JDKAQS
- JDK併發AQS系列(五)JDKAQS
- JDK併發AQS系列(二)JDKAQS
- JDK併發AQS系列(一)JDKAQS
- java併發神器 AQS(AbstractQueuedSynchronizer)JavaAQS
- Java併發(5)- ReentrantLock與AQSJavaReentrantLockAQS
- Java併發之AQS詳解JavaAQS
- Java併發之AQS原理剖析JavaAQS
- Java併發(6)- CountDownLatch、Semaphore與AQSJavaCountDownLatchAQS
- Java併發——AbstractQueuedSynchronizer(AQS)同步器JavaAQS
- [Java併發]AQS的可重入性JavaAQS
- Java併發之AQS原始碼分析(二)JavaAQS原始碼
- 高併發程式設計-AQS深入解析程式設計AQS
- java 併發程式設計-AQS原始碼分析Java程式設計AQS原始碼
- 併發程式設計——詳解 AQS CLH 鎖程式設計AQS
- Java併發之AQS同步器學習JavaAQS
- 併發容器J.U.C -- AQS元件(一)AQS元件
- 併發程式設計之:AQS原始碼解析程式設計AQS原始碼
- Java併發指南9:AQS共享模式與併發工具類的實現JavaAQS模式
- 併發容器J.U.C -- AQS同步元件(二)AQS元件
- Java併發程式設計序列之JUC底層AQSJava程式設計AQS
- Java併發程式設計之鎖機制之AQSJava程式設計AQS
- 最強幹貨:Java併發之AQS原理詳解JavaAQS
- Java併發指南7:JUC的核心類AQS詳解JavaAQS
- java併發程式設計系列:牛逼的AQS(上)Java程式設計AQS
- java併發程式設計系列:牛逼的AQS(下)Java程式設計AQS
- Java 併發程式設計 ----- AQS(抽象佇列同步器)Java程式設計AQS抽象佇列
- java併發程式設計 | 鎖詳解:AQS,Lock,ReentrantLock,ReentrantReadWriteLockJava程式設計AQSReentrantLock
- Java併發程式設計,深度探索J.U.C - AQSJava程式設計AQS
- Java 併發程式設計 —– AQS(抽象佇列同步器)Java程式設計AQS抽象佇列
- 【Java併發】【AQS鎖】鎖在原始碼中的應用JavaAQS原始碼
- 【高併發】AQS中的CountDownLatch、Semaphore與CyclicBarrier用法總結AQSCountDownLatch
- 《提升能力,漲薪可待》-Java併發之AQS全面詳解JavaAQS
- JUC併發程式設計基石AQS原始碼之結構篇程式設計AQS原始碼
- 深入理解Java併發框架AQS系列(四):共享鎖(Shared Lock)Java框架AQS
- 從 synchronized 到 CAS 和 AQS - 徹底弄懂 Java 各種併發鎖synchronizedAQSJava
- Java併發指南8:AQS中的公平鎖與非公平鎖,CondtionJavaAQS
- Java併發:深入淺出AQS之獨佔鎖模式原始碼分析JavaAQS模式原始碼