模型服务连接失败
并发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 并发
Java 并发并发JavaJava 并发

元信息

审核状态: active
关联来源: 1

来源面经题(0)

这道题目前没有手动沉淀的面经题来源。

来源(1)

Java八股(并发).md

knowledge_note
Question 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 这类带版本号方案解决。