栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【并发编程043】CAS存在的问题,ABA问题,如何解决的?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【并发编程043】CAS存在的问题,ABA问题,如何解决的?

CAS存在的问题,ABA问题,如何解决的?

ABA问题 。 因为CAS需要在操作值的时候, 检查值有没有发生变化, 如果没有发生变化 则更新, 但 是如果一个值原来是A, 变成了B, 又变成了A, 那么使用CAS进行检查时会发现它 的值没有发生变 化, 但是实际上却变化了 。ABA问题的解决思路就是使用版本号 。在变量前面 追加上版本号, 每次 变量更新的时候把版本号加1, 那么A→ B→A就会变成1A→2B→3A。

从 Java 1.5开始, JDK的Atomic包里提供了一个类AtomicStampedReference来解决ABA问题 。 这个 类的compareAndSet方法的作用是首先检查当前引用是否等于预期引用, 并且检查当前标志是 否等 于预期标志, 如果全部相等, 则以原子方式将该引用和该标志的值设置为给定的更新值。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/820426.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号