CAS 有三个操做数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相等时,将内存值V修改为B。这是一种乐观锁的思路,他相信在它修改以前,没有其余线程去修改他。线程
CAS 的缺陷:ABA 问题。CAS 是在更新值时,检查值有没有发生变化,若是没发生变化就执行更新操做。可是若是原来是 A,变成了 B,后来又变成 A,那么 CAS 是不会知道值已经发生变化了。但实际上却变化了。ABA 问题的解决思路就是使用版本号。给变量追加版本号,每次变量更新就将版本号 +1.那么 A-B-A 就会变成 A1-B2-A3内存