标签:子类 汇编 基本 enc 如何 set 获取 return 等于
在jdk里面提供的原子操作类有4中类型分别是针对原子更新基本类型如Integer,Boolean,Long类型,原子更新数组如AtomicIntegerArray,AtomicLongArray和AtomicReferenceArray对应的是整形数组,长整型数据以及引用数组,还有原子更新引用和原子更新属性。
以AtomicInteget为例子我们分析其内部的方法。
我们打开addAndGet的源码,探究是如何保证能以原子操作将数值相加的尼?
public final int getAndAddInt(Object var1, long var2, int var4) { int var5; do { var5 = this.getIntVolatile(var1, var2); } while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4)); return var5; }
搜先通过获取volatile的变量,然后通过CAS算法不断地比较,如果变量没有变化,则进行相加即可,并返回true以跳出循环。如果变量发生变化,则compareAndSwapInt修改不成功,返回false,则再次进入while循环,不断进行CAS比较,直到能修改成功为止。
CAS算法为什么是硬件级别算法?这是因为有专门地CMPXCHG指令,这是一条汇编指令,所以CPU一次通过,是原子操作。
标签:子类 汇编 基本 enc 如何 set 获取 return 等于
原文地址:https://www.cnblogs.com/dazhu123/p/12700248.html