Java 后端 · Java 并发
CAS 的原理是什么?ABA 问题怎么解决?
先自己想一想,再看参考要点
参考要点
- CAS 有内存地址 V、预期值 A、新值 B 三个操作数,V 等于 A 时才更新为 B,由处理器指令(x86 上带 lock 前缀的 cmpxchg)保证原子性,失败时不阻塞线程、只返回 false,由调用方决定重试还是放弃,incrementAndGet() 等方法在内部循环重试
- ABA 指值从 A 改为 B 又改回 A,CAS 误以为没变,会让无锁栈这类结构出错
- 用 AtomicStampedReference 给引用加版本号,每次修改加 1,持有旧版本号的 CAS 会失败
学习站:先用面试题自评定级,按水平和面试日期排出每天的计划,自评过的题按间隔复习。免费、无需注册,记录只保存在自己的浏览器中。