天天看點

#Java多線程——CAS#CAS(compareandswap)涉及使用cpu指令(不同架構不一緻,與cpu硬體指令有

#Java多線程——CAS #

CAS(compare and swap) 涉及使用cpu 指令(不同架構不一緻,與cpu硬體指令有關)保證操作的原子性。unsafe可以直接操作記憶體位址。 java.util.concurrent.atomic包下的采用cas保證操作的原子性。

主要3個操作數,目前值:A,記憶體值:V ,期望值:B。

if (A == C){ // 目前值 與記憶體值相等

C = B ; // 記憶體值修改為 B

}else{

//放棄更新 ,什麼都不做

}

CAS特點:

1)優點:采用CPU指令,屬于無鎖操作,多線程可以操作共享資源。

2)缺點:存在ABA問題,AtomicStampedReference類解決了ABA,除了比較記憶體值,增加了版本比較。

#Java多線程——CAS#CAS(compareandswap)涉及使用cpu指令(不同架構不一緻,與cpu硬體指令有
#Java多線程——CAS#CAS(compareandswap)涉及使用cpu指令(不同架構不一緻,與cpu硬體指令有
#Java多線程——CAS#CAS(compareandswap)涉及使用cpu指令(不同架構不一緻,與cpu硬體指令有

繼續閱讀