并发JavaJava 并发锁
- 分类
- Java 并发
- 难度
- 未设置
- 来源数
- 1
- 更新时间
- 2026/03/28 21:25
答案
ABA、CPU空转、只能保证一个变量的原子操作 + ABA问题:ABA问题就是说,当多个线程去操作一个资源时,比如线程1读取资源,记录预期值为A,然后此时线程2读取资源,并将资源修改为B,之后可能又将其修改为A,此时线程1继续执行,虽然当前值和预期值匹配,但此时的A并不是一开始的A,而是可能被修改过了。这就是ABA问题。ABA问题的解决方法就是可以加上一个时间戳,在JDK1.5之后,时使用AtomicStampedReference来解决的。他就是在检查的时候同时检查时间戳是否相等,相等则以原子方式进行更新。 + CPU空转就是CAS通常会使用自旋锁的方式来实现,当获取不成功时就循环进行获取直到成功,如果长时间不成功的话就会使CPU空转,增大开销。(解决方法:限制循环次数?合理使用自旋锁?) + 对于CAS而言,它只对单个变量有效,不能操作跨多个变量。在JDK1.5之后,可以使用AtomicReference类来保证引用对象之间的原子性,将多个变量封装到一个对象里进行操作。
相关题目(5)
Java 并发并发JavaJava 并发锁
Java 并发并发JavaJava 并发
Java 并发并发JavaJava 并发
Java 并发并发JavaJava 并发
有哪些支持并发的集合?共源 1
Java 并发并发JavaJava 并发
元信息
审核状态: active
关联来源: 1
来源面经题(0)
这道题目前没有手动沉淀的面经题来源。
来源(1)
Java八股(并发).md
knowledge_noteQuestion 37: CAS 有哪些问题?
Source answer: ABA、CPU空转、只能保证一个变量的原子操作 + ABA问题:ABA问题就是说,当多个线程去操作一个资源时,比如线程1读取资源,记录预期值为A,然后此时线程2读取资源,并将资源修改为B,之后可能又将其修改为A,此时线程1继续执行,虽然当前值和预期值匹配,但此时的A并不是一开始的A,而是可能被修改过了。这就是ABA问题。ABA问题的解决方法就是可以加上一个时间戳,在JDK1.5之后,时使用AtomicStampedReference来解决的。他就是在检查的时候同时检查时间戳是否相等,相等则以原子方式进行更新。 + CPU空转就是CAS通常会使用自旋锁的方式来实现,当获取不成功时就循环进行获取直到成功,如果长时间不成功的话就会使CPU空转,增大开销。(解决方法:限制循环次数?合理使用自旋锁?) + 对于CAS而言,它只对单个变量有效,不能操作跨多个变量。在JDK1.5之后,可以使用AtomicReference类来保证引用对象之间的原子性,将多个变量封装到一个对象里进行操作。
Reviewed answer: CAS 常见问题包括 ABA 问题、自旋重试导致的 CPU 空转,以及通常只能保证单个变量的原子操作。ABA 可用 AtomicStampedReference 这类带版本号方案解决。