CAS(compare and swap)乐观锁策略。
CAS(V, O, N) V:内存中实际的值 O:期望的值,也是当前线程持有的值 N:想要改变成的新值
假设有两个线程 A 和 B
A,和B同时拿到内存中的V值==M 也是就是期望值,
A线程 判断内存中的值等于期望值可以改 ------>将 内存中V值改位 N ,,,经过一些操作又将内存中的V值改成M, 而此时B线程呢由于是并发的 ,所以一直在比较期望的 旧值(M)与内存中的值是否相等,因为线程A经过两次更改将 内存中的值变回为了B线程期望的值(M)。
所以此时 B线程成功执行操作,但A呢?以前A执行操作不就没有作用。这就是ABA问题。
现在的解决办法就是加上版本号,就像每次的游戏更新包一样,看起来都一样,但只要加上版本号就能区别开来。