cas,即compare and swap,比較並交換。
更新乙個變數的時候,只有當變數的預期值a和記憶體位址v當中的實際值相同時,才會將記憶體位址v對應的值修改為b。
cas操作的就是樂觀鎖,每次不加鎖而是假設沒有衝突而去完成某項操作,如果因為衝突失敗就重試,直到成功為止。(非阻塞)
1.volatile,具有可見性,當執行緒對變數進行修改操作,修改完成後,修改後的新值會對其他執行緒可見。
但不具有原子性,舉個例子,執行緒a對乙個變數i進行操作,這時執行緒a被掛起,由執行緒b對變數i進行操作,修改了變數i的值並通知其他執行緒,但當a執行緒重新獲得鎖對變數i進行操作時,還是對原來未被b執行緒修改的變數i進行操作,所以不能保證原子性,是非執行緒安全的。
2.atomic,其實內部也是使用了volatile,並且具有原子性,所以是執行緒安全的,內部的原理是cas(樂觀鎖),每次修改之前都原來舊的預期值和記憶體中現在的值進行對比,如果不相等就重試該操作直到成功。
樂觀鎖 悲觀鎖以及CAS機制的研究
樂觀鎖 拿資料的時候都認為在使用該資料的過程中,別人不會修改它,所以在此過程中不會上鎖。而當更新資料之後,會判斷在此期間有沒有其他人更改這個資料。悲觀鎖 拿資料的時候都認為在使用過程中,別人會修改它,所以一開始就會上鎖,別人想拿該資料就會阻塞,直到獲取到鎖。共享資源只給乙個執行緒使用,其他執行緒阻塞...
CAS 樂觀鎖策略
cas,即compare and swap,比較後再交換,使用的場景 執行緒1執行如下指令 read a a write a 執行緒2執行如下指令 read a a write a 此時有這樣的執行順序 此時如果a的初始值為0,那麼兩個執行緒執行完最後的結果為1,而不是2。如下 public fin...
樂觀鎖 CAS演算法
cas全稱 compare and swap 比較與交換 是一種無鎖演算法。在不使用鎖 沒有執行緒被阻塞 的情況下實現多執行緒之間的變數同步。j a.util.concurrent包中的原子類就是通過cas來實現了樂觀鎖。cas演算法涉及到三個運算元 當且僅當 v 的值等於 a 時,cas通過原子方...