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等函数式方法
适用于计数器、状态标志、对象引用更新等场景。