Java併發包中ReentrantLock類源碼分析

  • ReentrantLock類,主要利用CAS+AQS(AbstractQueueSynchronizer)隊列來實現實現了Lock鎖;
  • 基本實現過程:先通過CAS嘗試獲取鎖,如果此時已經有線程佔據了鎖,那就加入AQS隊列並且掛起。當鎖被釋放之後,排在列隊首的線程會被喚醒,然後CAS再次嘗試獲取鎖。

  • ReentrantLock中包含內部類有:

       1)繼承了AbstractQueueSynchronizer類的Sync;

       2)NonfairSync非公平鎖類和FairSync公平鎖類;

  • 非公平鎖

       1)加鎖:ReentrantLock nonfairSyncLock = new ReentrantLock([false]); 執行過程源碼解析:  

            

       

            

          

          

      2)釋放鎖:nonfairSyncLock.lock();

              

        

  • 公平鎖:

       加鎖:ReentrantLock fairSyncLock = new ReentrantLock(true); 執行過程源碼解析:(與非公平鎖唯一不同點是,嘗試獲取鎖的時候,公平鎖使線程按照請求鎖的順序依次獲得鎖。)

          

        

      釋放鎖:fairSyncLock.lock();同非同步鎖執行邏輯。

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