CAS:Compare and Swap, 比較并交換。
CAS的作用是将指定記憶體位址的内容與所給的某個值相比,如果相等,則将其内容替換為指令中提供的新值,如果不相等,則更新失敗。這一比較并交換的操作是原子的,不可以被中斷。CAS是通過硬體指令保證了原子性,且硬體級别的原子性比進階語言的軟體級别的運作速度要快地多。雖然CAS也包含了多個操作,但其的運算是固定的(就是個比較),這樣的鎖定性能開銷很小。
CAS有3個操作數,記憶體值V,舊的預期值A,要修改的新值B。當且僅當預期值A和記憶體值V相同時,将記憶體值V修改為B,否則什麼都不做。
CAS有效地說明了“我認為位置V應該包含值A;如果包含該值,則将B放到這個位置;否則,不要更改該位置,隻告訴我這個位置現在的值即可。
AtomicInteger類compareAndSet通過原子操作實作了CAS操作,最底層基于彙編語言實作。
public final boolean compareAndSet(V expect, V update)
工作原理如圖:
記憶體值跟期望值相同時,
記憶體值跟期望值不同時,