由于变量的类型有很多种,所以在atomic包中一共提供了13个类,属于4种类型的原子更新方式:
(1)原子更新基本类型
(2)原子更新数组
(3)原子更新引用
(4)原子更新属性(字段)
7.1 原子更新基本类型
使用原子的方式更新基本类型,atomic包提供了以下3个类:
(1)原子更新布尔值:AtomicBoolean
(2)原子更新整形:AtomicInteger
(3)原子更新长整形:AtomicLong
7.2 原子更新数组
(1)原子更新整形数组里的元素:AtomicIntegerArray
(2)原子更新长整形数组里的元素:AtomicLongArray
(3)原子更新引用类型数组里的元素:AtomicReferenceArray
需要注意的是,数组通过构造方法AtomicIntegerArray(int [ ] array)传递进去,AtomicIntegerArray会将当该数组复制一份,所以不会修改原有数组。
而构造函数AtomicIntegerArray(int size)会创建一个新的大小为size的int 数组。
7.3 原子更新引用类型
(1)AtomicReference:原子更新引用类型
(2)AtomicReferenceFieldUpdater:原子更新引用类型的字段
(3)AtomicMarkableReference:原子更新带有标记位的引用类型
7.4 原子更新字段
(1)AtomicIntegerFieldUpdater:原子更新整形的字段
(2)AtomicLongFieldUpdater:原子更新长整形的字段
(3)AtomicStampedReference:原子更新带有版本号的引用类型,可用于原子的更新数据和数据的版本号。
想要原子的更新字段需要两步,(1)使用newUpdater创建一个更新器,设置想要更新的类和属性。
(2)更新类的属性和字段必须使用public volatile修饰。