一、CAS是什么?
比较并交换(compare and swap)。无锁、自旋锁、乐观锁、轻量级锁。
二、原理
CAS有三个操作数:
V:内存位置
A:预期原值
B:新值
比较并交换:线程修改V改为B值时,先比较A是否等于V,相等则把B值赋值给V,否则获取V重新比较并交换。
案例:
参照原子包AtomicInteger类
三、ABA问题
线程一将V值修改为B的过程中,预期原值为A。
线程二比较快,将V值改为B值又改回为A值。x执行过程:
线程二:V->B->A
线程一:A=V修改成功
上述就是ABA的问题。
解决方案
VERSION:版本号。
参照原子包AtomicStampedReference类。