本篇内容主要讲解“什么是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”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!