Atomic原子类介绍

Posted dazhu123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Atomic原子类介绍相关的知识,希望对你有一定的参考价值。

1:类介绍

  在jdk里面提供的原子操作类有4中类型分别是针对原子更新基本类型如Integer,Boolean,Long类型,原子更新数组如AtomicIntegerArray,AtomicLongArray和AtomicReferenceArray对应的是整形数组,长整型数据以及引用数组,还有原子更新引用和原子更新属性。

1.1:原子更新基本类型

  以AtomicInteget为例子我们分析其内部的方法。

  1. int addAndGet(int delta),以原子方式,将输入数值和实例的数值即AtomicInteger的value相加,并返回。
  2. 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原子类介绍的主要内容,如果未能解决你的问题,请参考以下文章

JAVA私房菜专栏之Atomic原子类总结

JUC 中的 Atomic 原子类总结

原子操作类原子操作类详细介绍

八:并发编程之Atomic&Unsafe魔法类详解

Java多线程之Atomic:原子变量与原子类

24.Java中atomic包中的原子操作类总结