20230614 java.util.concurrent.atomic.AtomicInteger
介绍
- java.util.concurrent.atomic.AtomicInteger
public class AtomicInteger extends Number implements java.io.Serializable
API
构造器
- AtomicInteger()
- AtomicInteger(int initialValue)
- 设置初始值,默认是 0
public 方法
-
get , set
- 原子操作
- 不同步内存屏障,不能保证对其他线程的变化或者获取到的数值的可见性
-
lazySet
-
getAndSet
- 以原子方式设置新值,并返回旧值
-
compareAndSet
boolean compareAndSet(int expectedValue, int newValue)
- 如果当前值 等于 expectedValue ,则以原子方式将值设置为 newValue
- 如果成功则为 true ,false 返回表示当前实际值不等于预期值
加减n并返回值:
-
getAndIncrement
-
getAndDecrement
- 加减 1 , 返回旧值
-
getAndAdd
int getAndAdd(int delta)
- 加减 n , 返回旧值
-
incrementAndGet
-
decrementAndGet
- 加减 1 , 返回新值
-
addAndGet
- 加减 n , 返回新值
-
getAndUpdate
-
updateAndGet
int getAndUpdate(IntUnaryOperator updateFunction)
- 更新并返回值
-
getAndAccumulate
-
accumulateAndGet
- 累积并返回值
int getAndAccumulate(int x, IntBinaryOperator accumulatorFunction)
accumulatorFunction.applyAsInt(prev, x)
-
getPlain , setPlain
- 不是原子操作,不保证线程安全,性能更高
-
getOpaque , setOpaque
- 使用 “volatile 读” 确保操作的内存可见性,但不会引起任何屏障操作
-
getAcquire
- getAcquire() 方法使用 “volatile 读” 确保操作的内存可见性,并创建一个内存屏障
-
setRelease
- setRelease() 方法使用 “volatile 写” 确保操作的内存可见性,并创建一个内存屏障
-
compareAndExchange
-
compareAndExchangeAcquire
-
compareAndExchangeRelease
int compareAndExchange(int expectedValue, int newValue)
- 返回旧值
-
weakCompareAndSetPlain
-
weakCompareAndSetVolatile
-
weakCompareAndSetAcquire
-
weakCompareAndSetRelease
代码理解
内部是 volatile int
值,利用 Unsafe
进行 CAS 操作
private volatile int value;