- 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();同非同步鎖執行邏輯。