AtomicReference
基本概念
- AtomicReference的作用是对引用对象进行原子操作
AtomicReference函数列表
AtomicReference
/**
* 使用null初始值创建新的AtomicReference
*/
public AtomicReference() {
}
/**
* 使用给定的初始值创建新的AtomicReference
*
* @param initialValue 给定的初始值
*/
public AtomicReference(V initialValue) {
value = initialValue;
}
compareAndSet
/**
* 如果当前值等于预期值,则将当前值设置为给定的更新值
*
* @param expect 预期值
* @param update 更新值
* @return boolean 是否更新成功
*/
public final boolean compareAndSet(V expect, V update) {
return unsafe.compareAndSwapObject(this, valueOffset, expect, update);
}
get
/**
* 获取当前值
*
* @return V 当前值
*/
public final V get() {
return value;
}
getAndSet
/**
* 使用原子的方式将值更新为给定的值,并返回更新前的值
*
* @param newValue 给定的更新值
* @return V 更新前的值
*/
public final V getAndSet(V newValue) {
return (V)unsafe.getAndSetObject(this, valueOffset, newValue);
}
lazySet
/**
* 懒设置,最终设置为给定的值
*
* @param newValue 给定的更新值
*/
public final void lazySet(V newValue) {
unsafe.putOrderedObject(this, valueOffset, newValue);
}
set
/**
* 设置为给定的新值
*
* @param newValue 给定的更新值
*/
public final void set(V newValue) {
value = newValue;
}
toString
/**
* 返回当前值的字符串表示形式
*
* @return String 当前值的字符串表示形式
*/
public String toString() {
return String.valueOf(get());
}
weakCompareAndSet
/**
* 如果当前值等于预期值,则以原子的方式将当前值设置为给定的更新值
*
* @param expect 预期值
* @param update 给定的更新值
* @return boolean 是否更新成功
*/
public final boolean weakCompareAndSet(V expect, V update) {
return unsafe.compareAndSwapObject(this, valueOffset, expect, update);
}
AtomicReference源码
-
AtomicReference是通过volatile和Unsafe提供的CAS实现原子操作
-
value值是volatile类型
- 当某个线程修改value值时,其余线程获取的值都是最新的value值,也就是修改之后的volatile值
-
通过CAS设置value:
- 当某个线程池通过CAS函数设置value时,操作是原子的,也就是线程在操作value时不会被中断
-