原子类

基于cas设计的工具类

原子整数

原子引用

类名 描述
AtomicInteger 原子地操作 int 类型的值。
AtomicLong 原子地操作 long 类型的值。
AtomicBoolean 原子地操作 boolean 类型的值。
AtomicReference<V> 原子地操作引用类型的值(对象)。
AtomicIntegerArray 原子地操作 int 数组中的元素。
AtomicLongArray 原子地操作 long 数组中的元素。
AtomicReferenceArray<E> 原子地操作对象数组中的元素。

方法签名 描述
public final int get() 获取当前值。
set(int newValue) 设置为新值。与 volatile 变量的写入具有相同的内存可见性效果。
int getAndSet(int newValue) 原子地设置为新值,并返回旧值。
boolean compareAndSet(int expect, int update) CAS 操作:如果当前值等于期望值 expect,则原子地将该值设置为新值 update,并返回 true;否则返回 false。
incrementAndGet() 原子地将当前值加 1,并返回新值
getAndIncrement() 原子地将当前值加 1,并返回旧值
addAndGet(int delta) 原子地将给定值 delta 加到当前值,并返回新值
getAndAdd(int delta) 原子地将给定值 delta 加到当前值,并返回旧值

ABA问题

AtomicReference

a,b 中间经历了a,b和b,a, 看似pre没变, 实则中间发生了小事情,对业务无影响

1
2
解决方法:AtomicStampedReference---&gt;加版本号<br />
getStamp()---&gt;获取版本号</td>
AtomicMarkableReference

image1

原子数组 image2
字段更新器

image3

原子累加器:

性能更好,操作更简单

直接increment

没有什么get,incre顺序上的区分

image5