1 Atomic 类
1.1 Atomic 是什么?
Java从JDK1.5 开始提供了java.util.concurrent.atomic包(以下简称Atomic包),这个包中的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式。
Atomic包大致可以分为4类
- 原子更新基本类型
- 原子更新数组
- 原子更新引用
- 原子更新属性
Atomic只能保证读写安全(读写会加锁),并不能保证线程安全。例如:
如果线程 A 调了 getter,与此同时线程 B 、线程 C 都调了 setter——那最后线程 A get 到的值,有3种可能:可能是 B、C set 之前原始的值,也可能是 B set 的值,也可能是 C set 的值。同时,最终这个属性的值,可能是 B set 的值,也有可能是 C set 的值。所以Atomic并不能保证对象的线程安全。
1.2 具有原子性的原理
底层使用的是CAS算法。
我们以 AtomicInteger 类的 getAndAdd(int delta) ⽅法为例,来看看Java是如 何实现原⼦操作的。
public final int getAndAdd