Atomic原子类介绍
Posted dazhu123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Atomic原子类介绍相关的知识,希望对你有一定的参考价值。
1:类介绍
在jdk里面提供的原子操作类有4中类型分别是针对原子更新基本类型如Integer,Boolean,Long类型,原子更新数组如AtomicIntegerArray,AtomicLongArray和AtomicReferenceArray对应的是整形数组,长整型数据以及引用数组,还有原子更新引用和原子更新属性。
1.1:原子更新基本类型
以AtomicInteget为例子我们分析其内部的方法。
- int addAndGet(int delta),以原子方式,将输入数值和实例的数值即AtomicInteger的value相加,并返回。
- boolean compareAndSet(int expect,int update)如果输入值等于预期值则以原子方式将该值设置为输入值。
我们打开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一次通过,是原子操作。
以上是关于Atomic原子类介绍的主要内容,如果未能解决你的问题,请参考以下文章