Java中的java.util.concurrent.atomic
包提供了多种原子操作工具类,以下是核心类及其方法:
1. AtomicBoolean
方法:
get()
:获取当前值set(boolean newValue)
:强制设置值compareAndSet(boolean expect, boolean update)
:CAS操作getAndSet(boolean newValue)
:原子获取旧值并设置新值lazySet(boolean newValue)
:最终一致性设置(不保证立即可见)
2. AtomicInteger/AtomicLong
方法:
get()
/intValue()
:获取当前值set(int newValue)
:强制设置值compareAndSet(int expect, int update)
:CAS操作getAndIncrement()
:原子自增(返回旧值)getAndDecrement()
:原子自减getAndAdd(int delta)
:原子加法incrementAndGet()
:自增并返回新值updateAndGet(IntUnaryOperator updateFunction)
:函数式更新
3. AtomicReference<V>
方法:
get()
:获取引用值set(V newValue)
:强制设置引用compareAndSet(V expect, V update)
:CAS操作getAndSet(V newValue)
:原子交换引用updateAndGet(UnaryOperator<V> updateFunction)
:函数式更新引用
4. AtomicIntegerArray/AtomicLongArray
方法:
length()
:数组长度get(int i)
:获取下标i
的值set(int i, int newValue)
:设置指定下标值compareAndSet(int i, int expect, int update)
:CAS操作指定元素getAndIncrement(int i)
:原子自增数组元素
5. AtomicStampedReference<V>
方法:
getReference()
:获取引用值getStamp()
:获取版本戳compareAndSet(V expectedReference, V newReference, int expectedStamp, int newStamp)
:带版本戳的CAS
6. AtomicMarkableReference<V>
方法:
isMarked()
:获取标记状态compareAndSet(V expectedReference, V newReference, boolean expectedMark, boolean newMark)
:带标记位的CAS
7. LongAdder/DoubleAdder(高并发统计场景)
方法:
add(long x)
:累加值sum()
:返回总和(非原子)reset()
:重置计数器
特点总结:
- 线程安全:所有操作均为原子性
- 无锁设计:基于CAS实现高性能并发
- 内存语义:遵循
volatile
的可见性和有序性 - 函数式支持:JDK8+提供
updateAndGet
等函数式方法
适用于计数器、状态标志、对象引用更新等场景。