1. AQS原理
1.1. 是什么
AQS全程AbstractQueuedSynchronizer
抽象隊列同步器,它是並發包中的基礎類
ReetrantLock
,ReentrantReadWriteLock
底層都用到了AQS來實現
1.2. AQS有什么功能
當lock.lock()
的時候,實際上底層是由AQS來完成的加鎖,AQS提供了一個state
表示加鎖狀態,默認0表示不加鎖,Thread的屬性存放加鎖線程;
當加鎖的時候,通過cas操作將state+1,則成功獲取鎖,cas操作達到了加鎖的互斥效果
鎖的可重入性,就是通過state不斷+1實現,對一個ReentrantLock不斷加鎖,則state不斷+1,釋放鎖則-1
當加鎖失敗后,會把失敗線程加到AQS中的隊列里,等待獲取鎖
如果是公平鎖,當釋放鎖后會從隊列頭結點來獲取線程加鎖,非公平鎖則可能新來的線程也可能搶到鎖