您好,登录后才能下订单哦!
本篇内容主要讲解“什么是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的原子类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”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。