java.util.concurrent.atomic包中有13个原子类,属于四种类型 的跟新方式,分别是原子更新基本类型,原子更新数组,原子更新引用和原子更新属性(字段)。基本都是使用Unsafe实现的包装类
1. 原子更新基本类型
- AtomicBoolean: 原子更新布尔类型
- AtomicInteger:原子更新整型
- AtomicLong:原子更新长整型
都提供一下方法(以AtomicInteger为例):
- int addAndGet(int delta):原子方式相加
- boolean compareAndSet(int expect, int update):与except比较,以原子方式设置为update
- int getAndIncrement():以原子方式加1,注意返回的是自增前的值
- void lazySet(int newValue):最终变成newValue
- int getAndSet(int newValue):以原子方式设置为newValue,返回旧值
2. 原子更新数组
- AtomicIntegerArray:原子更新整型数组元素
- AtomicLongArray:原子更新长整型数组元素
- AtomicReferenceArray:原子更新引用类型数组的元素
常用方法:
- addAndGet(int i, int delta):原子方式将输入值与数组中索引i的元素相加
- boolean compareAndSet(int i, int expect, int update):当前值等于预期,就原子更新为update
3. 原子更新引用字段
- AtomicReference:原子更新引用字段
- AtomicReferenceFieldUpdater:原子更新引用类型里面的字段
- AtomicMarkableReference:原子更新带有标布尔类型标记位的引用类型
4. 原子更新字段类
- AtomicIntegerFieldUpdater:原子更新整型的字段的更新器
- AtomicLongFieldUpdater:原子更新长整型字段的更新器
- AtomicStampedReference:原子更新带有版本号的引用类型,可以将整型值与引用关联起来,用于原子的更新数据和数据的版本号,解决CAS进行原子更新的ABA问题。
网友评论