介绍
- 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;
- AtomicInteger concurrent 20230614 atomic javaatomicinteger concurrent 20230614 atomic atomicinteger atomicboolean原理atomic concurrent java util completablefuture concurrent 20230618 java executorservice concurrent 20230713 java rejectedexecutionexception concurrent java util java线程concurrent工具 threadpoolexecutor concurrent 20230713 java strimped原理atomic java concurrent 20230607 locks java