温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

什么是JAVA CAS

发布时间:2021-10-14 09:28:15 来源:亿速云 阅读:167 作者:iii 栏目:编程语言

本篇内容主要讲解“什么是JAVA CAS”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是JAVA CAS”吧!

  • CAS (compare and swap)  

CAS 是CPU支持的一种指令机制 ,CAS 操作包含三个操作数 ”内存位置(V)、预期原值(A)和新值(B)“  ,如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值,否则,处理器不做任何操作。

  • JAVA CAS

单独来说CAS,它跟应用语言无关,我们所说的JAVA CAS,说的是JDK基于CAS实现的原子操作相关API, 详见java.util.concurrent.atomic 

所谓的CAS"自旋"也跟CPU本身无关,是应用语言自己负责实现,如下:

什么是JAVA CAS 

我们来看Java的原子类AtomicInteger的++操作,是如何进行CAS自旋的:

public final int getAndAddInt(Object var1, long var2, int var4) {
        int var5;
        do {
            var5 = this.getIntVolatile(var1, var2); //更新之前,先查询旧值v5
        } while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));//新值var5+var4,如果更新时,发现内存的值更旧值不一致,则返回false,循环继续执行,实现自旋。
        return var5;
    }
  • ABA问题

如果一个值查询时是A,然后被别的线程改成了B,又改成了A,最后使用CAS进行检查时会发现它的值没有发生变化,但是实际上却变化了。

ABA问题解决方案: 给变量追加一个版本号,每次变量更新的时候把版本号加1 

到此,相信大家对“什么是JAVA CAS”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI