JUC之AQS的學習

AbstractQueuedSynchronizer

有了它這個基礎類可以方便構建其它的線程協作工具類。

AQS三大核心

state狀態

  • 具體含義會根據不同實現的類不同的定義。比如在semaphore裏,它表示剩餘的許可證數量,在CountDownLatch裏表示還需要倒數的數量。
  • state是被volatile修飾的會被併發的修改。所以所有修改的地方都需要保證線程安全。

控制線程搶鎖和配合的FIFO隊列

這個隊列用來存放等待的線程。當多個線程來拿鎖時,必須有排隊機制將那些沒能拿到鎖的線程串在一起。當鎖釋放時,鎖管理器就會挑選一個合適的線程佔有剛剛釋放的鎖。

期望協作工具列實現的獲取/釋放等重要方法

獲取操作依賴於state變量會發生阻塞

釋放操作不會阻塞

學習資料

美團技術團隊《從ReentrantLock的實現看AQS的原理及應用》:https://mp.weixin.qq.com/s/sA01gxC4EbgypCsQt5pVog

老錢《打通 Java 任督二脈 —— 併發數據結構的基石》:https://juejin.im/post/5c11d6376fb9a049e82b6253 HongJie

《一行一行源碼分析清楚AbstractQueuedSynchronizer》:https://javadoop.com/post/AbstractQueuedSynchronizer

愛喫魚的KK《AbstractQueuedSynchronizer 源碼分析 (基於Java 8)》:https://www.jianshu.com/p/e7659436538b waterystone

《Java併發之AQS詳解》:https://www.cnblogs.com/waterystone/p/4920797.html

英文論文的中文翻譯:https://www.cnblogs.com/dennyzhangdd/p/7218510.html

AQS作者的英文論文:http://gee.cs.oswego.edu/dl/papers/aqs.pdf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章