欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

原子变量 java.util.concurrent.atomic jdk 1.7

程序员文章站 2022-07-12 18:36:55
...

  在java并发包的一个子包中,提供了针对于基础类型的原子类型,熟悉并发的会知道,i++并不是一个原子操作,long longValue = 100l;也不是一个原子操作;

那么java.util.concurrent.atomic包中是如何实现对基础类型数据的原子操作的呢?

  以AtomicLong类为例:

 

private volatile long value;

 AtomicLong类有个成员变量value,声明为volatile的;也就是各个线程的共享变量,

   以getAndAdd方法来说明增加值是如何实现原子操作的:

    public final long getAndAdd(long delta) {
        while (true) {
            long current = get();//获取线程中最新的value
            long next = current + delta;//获取修改后的期望值
            if (compareAndSet(current, next))//判断value值是否被修改,如果被修改在while循环中循环改过程,如果未被修改,返回修改后的值
                return current;
        }
    }

    public final long getAndAdd(long delta) {
        while (true) {
            long current = get();
            long next = current + delta;
            if (compareAndSet(current, next))
                return current;
        }
    }

 上面这个方法的实现,就是一个CAS(lock-free)算法的一个实现,该算法在网上有很多详细的解释,大家可以详细的看一下!