#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,除了比較記憶體值,增加了版本比較。