20230614 java.util.concurrent.atomic.AtomicInteger

发布时间 2023-08-22 17:41:49作者: 流星<。)#)))≦

介绍

  • 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;