星海

并发 · 单选题 · 第 20 题

Java 后端开发面试 · 第 20 题

使用 CAS 时可能遇到 ABA 问题,常见的解决办法是?

  1. A把共享变量改成用 volatile 修饰,保证可见性
  2. B使用带版本号的 AtomicStampedReference
  3. C增加 CAS 失败后的自旋重试次数直到成功
  4. D把引用换成 AtomicInteger 再做 CAS 比较

答案

B B. 使用带版本号的 AtomicStampedReference

解析

ABA 指值从 A 改成 B 又改回 A,CAS 只比较值,会误以为没有变化。加上版本号或时间戳后,每次修改版本都会递增,CAS 同时比较值和版本就能发现中间的变化。volatile 只解决可见性,增加自旋次数和换成 AtomicInteger 都不会改变「只比较值」这一点。

在线刷这套题:即时判分、错题本、闪卡复习,不用登录就能练。