# Atomic Class

原子类是通过[无锁方案（CAS）](https://yunzhao.gitbook.io/notes/java/synchronized#cas)实现的。

![](https://3232244687-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LYZow-MmROshIrkwdtE%2F-Ld96Yae192SE0ap_cG-%2F-Ld98iH_kdIiE_BumFIv%2Fimage.png?alt=media\&token=527a76c6-2167-4435-a97f-298e4108b4a6)

## 基本数据类型

* AtomicBoolean
* AtomicInteger&#x20;
* AtomicLong

## 对象引用类型

* AtomicReference：会有 ABA 问题。
* AtomicStampedReference：无 ABA 问题，CAS 方法增加了版本号参数。
* AtomicMarkableReference：无 ABA 问题，将版本号简化成了一个 Boolean 值。

## 数组

可以原子化地更新数组里面的每一个元素。与基本数据类型的区别是：**每个方法多了一个数组的索引参数**。

* AtomicIntegerArray
* AtomicLongArray
* AtomicReferenceArray

## 对象属性更新器

可以原子化地更新对象的属性。与基本数据类型的区别是：**每个方法多了一个对象引用参数**。

* AtomicIntegerFieldUpdater
* AtomicLongFieldUpdater
* AtomicReferenceFieldUpdater

{% hint style="warning" %}
对象属性必须是 volatile 类型的，只有这样才能保证可见性。否则会抛出 IllegalArgumentException。
{% endhint %}

## 累加器

用来执行累加操作，相比原子化的基本数据类型，速度更快。但是不支持 compareAndSet() 方法。

* DoubleAccumulator
* DoubleAdder
* LongAccumulator
* LongAdder
