什么是CAS compare and swap——比较并替换
- 并发
- 我认为V的值应该是A,如果是的那我就把它改成B,如果不是A(说明被修改过了),那我就不修改了,避免多人同时修改导致出错。
- CAS有三个操作数:内存值V、预期值A、要修改的值B,当且仅当预期值A和内存值V相同时,才将内存值修改为B,否则什么都不做。最后返回现在的V值。
应用场景
- 乐观锁
- 并发容器:ConcurrentHashMap
- 原子类
CAS的缺点
- ABA问题:CAS只会对比现在的值和原来的值是否相同,而不会判断是否发生了改变,这样就会认为没有发生过变化,会导致一些逻辑无法实现。
- 解决办法:沿用数据库的方式,通过加上一个版本号来解决。