深入淺出理解鎖之—— AbstractQueuedSynchronizer
在Java中,多線程的情況下需要鎖來保證數據的安全。
鎖一般分爲兩類:sychronized 和 Lock
- sychronized利用的是指令級別的monitor-enter 和 monitor-exit。
- Lock 使用的則是代碼級別實現的。在Doug Lea大神的操刀下利用CAS + 自旋 + volatile變量實現。
而在實現之後,並且抽象出了一個實現鎖的基礎類AbstractQueuedSynchronizer,通過這個類可以快速的實現符合自己要求的鎖。
本篇博客是在學習了AQS的代碼之後,由淺入深的從最基礎的知識一直到AQS的深入理解。
限於水平有限,如果有寫的不對的地方還望各位多多指教
一,基礎知識——LockSupport
二,自己設計一個鎖
三,由剛纔寫的鎖轉變成一個公平鎖
四,看看我們寫的和ReentrantLock的公平不公平鎖的區別
AQS理解之四,看看我們寫的和 ReentrantLock 的公平不公平鎖的區別