浅谈AQS(AbstractQueuedSynchronizer,同步队列)
生活随笔
收集整理的這篇文章主要介紹了
浅谈AQS(AbstractQueuedSynchronizer,同步队列)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.1 同步隊列:隊列中存放排隊等待鎖的線程,每個線程放入隊列時會被包裝為Node類,如下圖。
?1.2 搶鎖:調(diào)用lock方法,如果搶鎖成功(CAS成功,或者是重入——state計數(shù)加1),那么initialTryLock方法返回true,如下圖。如果失敗,再重新acquire嘗試一次。嘗試之后還是失敗,那么將當(dāng)前線程放入AQS等待隊列中,并通過LockSupport的park方法掛起當(dāng)前線程。
搶鎖時,公平鎖FairSync和非公平鎖NonFairSync的區(qū)別就是公平鎖FairSync在搶鎖時會判斷當(dāng)前等待隊列中是否有線程在等待,如下圖所示。
?1.3 釋放鎖:因為存在重入,所以state減到0,才說明鎖完全釋放。
?
?
總結(jié)
以上是生活随笔為你收集整理的浅谈AQS(AbstractQueuedSynchronizer,同步队列)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库的binlog、redolog以及
- 下一篇: 半编译半解释的Java语言和C++、Py