乐趣区

AtomicReference源码学习

接着前两篇的 AtomicBoolean 和 AtomicInteger 再来看看 AtomicReference 类上的注释说明:
An object refenrence that may be updated atomically. 用来原子更新对象的引用。
一、AtomicRefenrence 属性

private static final Unsafe unsafe = Unsafe.getUnsafe();
private static final long valueOffset;
private volatile V value;
static{
    try{
        valueOffset = unsafe.objectFieldOffset
            (AtomicReference.class.getDeclaredField("value"));
    }catch(Exception e){throw new Error(ex);
    }
}

二、构造器

/**
*Creates a new AtomicReference with the given initial value
*/
public AtomicReference(V initialValue){value = initialValue;}
/**
* Creates a new AtomicReference with null initail value
*/
public AtomicReference(){}

除了上面的属性、构造器外,AtomicReference 与 AtomicBoolean、
AtomicInteger 在方法上都差不多,这里只提一个方法:

/**
*Atomically sets to the given value and returns the old value.
*/
public final V getAndSet(V newValue){return(V)unsafe.getAndSetObject(this,valueOffset,newValue);
}

这个方法同 AtomicInteger 一样是在 Unsafe 类里进行自旋,与 AtomicBoolean 略有不同。

退出移动版