CAS的实现原理
protected final boolean compareAndSetState(int
expect, int update) { // See below for intrinsics setup to support this return unsafe.compareAndSwapInt(this, stateOffset, expect, update);
}
通過cas樂觀鎖的方式來做比較并替換,這段代碼的意思是,如果當前內存中的state的值和預期值expect相等,則替換為update。更新成功返回true,否則返回false.
這個操作是原子的,不會出現線程安全問題,這里面涉及到Unsafe這個類的操作,以及涉及到state這個屬性的意義。
state是AQS中的一個屬性,它在不同的實現中所表達的含義不一樣,對于重入鎖的實現來說,表示一個同步狀態。它有兩個含義的表示
1.?當state=0時,表示無鎖狀態
2.?當state>0時,表示已經有線程獲得了鎖,也就是state=1,但是因為ReentrantLock允許重入,所以同一個線程多次獲得同步鎖的時候,state會遞增,比如重入5次,那么state=5。?而在釋放鎖的時候,同樣需要釋放5次直到state=0其他線程才有資格獲得鎖
?
總結
- 上一篇: R eentrantLock的源码分析
- 下一篇: Unsafe类