第七章 Java 中的 13 个原子操作类
7.1 原子更新基本类型
Atomic 包提供了3中基本类:
- AtomicBoolean
- AtomicInteger
- AtomicLong
这三个类的方法几乎一样,这里以 AtomicInteger 为例。AtomicInteger 的常用方法如下:
- int addAndGet(int delta)
- 以原子方式相加原值与传入值,返回结果
- boolean compareAndSet(int expect, int update)
- 如果输入值等于预期值,则以原子方式设置该值
- int getAndIncrement()
- 原子方式自增,返回旧值
- void lazySet(int newValue)
- 延迟设置值,可能导致其他线程在一小段时间内还是读到旧值
- int getAndSet(int newValue)
- 以原子方式设置为 newValue,返回旧值
AtomicBoolean 是把 Boolean转换为 整型,再使用 compareAndSwapInt 进行CAS。
7.2 原子更新数组
Atomic 包提供了以下 4 个类:
- AtomicIntegerArray
- 原子更新整型数组里的元素
- AtomicLongArray
- 原子更新长整型数组里的元素
- AtomicReferenceArray
- 原子更新引用类型数组里的元素
以 AtomicIntegerArray 为例,常用方法有:
- int addAndGet(int i,int delta)
- boolean compareAndSet(int i,int expect,int update)
7.3 原子更新应用类型
Atomic 包提供了以下 3 个类:
- AtomicReference
- 原子更新引用类型
- AtomicReferenceFieldUpdater
- 原子更新引用类型里的字段
- AtomicMarkableReference
- 原子更新带有标记位的应用类型
7.4 原子更新字段类
Atomic 包提供了以下 3 个类:
- AtomicIntegerFieldUpdater
- 原子更新整型的字段-更新器
- AtomicLongFieldUpdater
- 原子更新长整型字段的更新器
- AtomicStampedReference
- 原子更新带版本号的应用类型