回答
Java 的原子操作类是位于 java.util.concurrent.atomic
包中的类,他们主要用于确保在多线程环境下对某些变量的操作是原子操作。
在多线程环境下,对单个变量进行操作,会出现多线程安全问题,导致数据不一致,为了避免这种情况发生,我们可以使用同步机制,比如 synchronized
或者 Lock
,但是他们成本太高了,而原子操作类则提供了一种高效的方法来实现线程安全操作。
Java 提供了 12 个原子操作类,共分为四大类。
一、原子更新基本类
AtomicBoolean
:原子更新布尔值。AtomicInteger
:原子更新整数值。AtomicLong
: 原子更新长整数值。
二、原子更新数组
AtomicIntegerArray
:原子更新整数数组中的元素。AtomicLongArray
:原子更新长整数数组中的元素。AtomicReferenceArray
:原子更新引用类型数组中的元素。
三、原子更新引用类型
AtomicReference
:原子更新引用类型变量AtomicMarkableReference
:原子更新带有标记位的引用类型变量AtomicStampedReference
:原子更新带有版本戳的引用类型变量
四、原子更新字段类型
AtomicIntegerFieldUpdater
:原子更新某个类中的 int 字段。AtomicLongFieldUpdater
:原子更新某个类中的 long 字段。AtomicReferenceFieldUpdater
:原子更新某个类中的引用类型字段。
扩展
整个Java 原子操作类其实底层实现原理都差不多,我们主要掌握其中一到两个就可以了,大明哥以 AtomicInteger
和 AtomicStampedReference
为例来讲述。