知識鋪: 致力於打造輕知識點,持續更新每次的知識點較少,閱讀不累。不佔太多時間,不停的來喚醒你記憶深處的知識點。
一、自旋原理
簡單講:線程嘗試獲取鎖的過程不會阻塞,而是採用循環的方式不斷獲取鎖。
優點: 減少內核態和用戶態切換的消耗
缺點: 不停自旋消耗CPU
二、 動手實現簡單自旋鎖
2.1 利用 AtomicReference 實現
AtomicReference 原子性,底層實現CAS操作,可以對比普通對象的引用。
源碼簡析:
從源碼中可以看出,AtomicReference 這原子操作底層使用的是unsafe.compareAndSwapObject 來完成,也就支持普通對象的 CAS操作。
AtomicInteger 這個也是原子操作,底層進行CAS比較的是整數,沒有AtomicReference 這個更實用。
2.2 手寫簡單自旋鎖源碼
2.3 簡單進行測試