關于AbstractQueuedSynchronizer

JDK1.5之后引入了并發(fā)包java.util.concurrent,大大提高了Java程序的并發(fā)性能。關于java.util.concurrent包我總結如下:

  • AbstractQueuedSynchronizer是并發(fā)類諸如ReentrantLock、CountDownLatch、Semphore的核心

  • CAS算法是AbstractQueuedSynchronizer的核心

可以說AbstractQueuedSynchronizer是并發(fā)類的重中之重。其實之前在ReentrantLock實現(xiàn)原理深入探究一文中已經有結合ReentrantLock詳細解讀過AbstractQueuedSynchronizer,但限于當時水平原因,回看一年半前的此文,感覺對于AbstractQueuedSynchronizer的解讀理解還不夠深,因此這里更新一篇文章,再次解讀AbstractQueuedSynchronizer的數(shù)據(jù)結構即相關源碼實現(xiàn),本文基于JDK1.7版本。

 

AbstactQueuedSynchronizer的基本數(shù)據(jù)結構

AbstractQueuedSynchronizer的基本數(shù)據(jù)結構為Node,關于Node,JDK作者寫了詳細的注釋,這里我大致總結幾點:

  1. AbstractQueuedSynchronizer的等待隊列是CLH隊列的變種,CLH隊列通常用于自旋鎖,AbstractQueuedSynchronizer的等待隊列用于阻塞同步器

  2. 每個節(jié)點中持有一個名為"status"的字段用于是否一條線程應當阻塞的追蹤,但是status字段并不保證加鎖

  3. 一條線程如果它處于隊列的頭,那么他會嘗試去acquire,但是成為頭并不保證成功,它只是有權利去競爭

  4. 要進入隊列,你只需要自動將它拼接在隊列尾部即可;要從隊列中移除,你只需要設置header字段

延伸閱讀

學習是年輕人改變自己的最好方式-Java培訓,做最負責任的教育,學習改變命運,軟件學習,再就業(yè),大學生如何就業(yè),幫大學生找到好工作,lphotoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網站設計培訓,網站建設培訓學習是年輕人改變自己的最好方式