Java 多线程编程之原子类 AtomicInteger(构造方法、常用方法、高级操作方法)

一、AtomicInteger

  • AtomicInteger 是 Java 并发包(java.util.concurrent.atomic)中的一个类,它提供了一种线程安全的整数操作方式,它有如下特点
  1. 原子性操作保证

  2. 可见性操作保证,遵循 happens-before 规则

  3. 基于 CAS 的无锁算法


二、构造方法

1、基本介绍
AtomicInteger()
  1. 创建初始值为 0 的 AtomicInteger
AtomicInteger(int initialValue)
  1. 创建指定初始值的 AtomicInteger
2、演示
AtomicInteger atomicInteger1 = new AtomicInteger();

AtomicInteger atomicInteger2 = new AtomicInteger(10);

三、常用方法

1、基本介绍
int get()
  1. 获取当前值
void set(int newValue)
  1. 设置新值
int getAndSet(int newValue)
  1. 获取当前值并设置新值
int getAndIncrement()
  1. 获取当前值然后加 1
int incrementAndGet()
  1. 加 1 然后获取新值
int getAndDecrement()
  1. 获取当前值然后减 1
int decrementAndGet()
  1. 减 1 然后获取新值
int getAndAdd(int delta)
  1. 获取当前值然后加上指定值
int addAndGet(int delta)
  1. 加上指定值然后获取新值
2、演示
  1. get 方法与 set 方法
AtomicInteger atomicInteger = new AtomicInteger(10);

System.out.println(atomicInteger.get());

atomicInteger.set(20);

System.out.println(atomicInteger.get());
# 输出结果

10
20
  1. getAndSet 方法
AtomicInteger atomicInteger = new AtomicInteger(10);

int result = atomicInteger.getAndSet(20);

System.out.println(result);
System.out.println(atomicInteger.get());
# 输出结果

10
20
  1. getAndIncrement 方法
AtomicInteger atomicInteger = new AtomicInteger(10);

int result = atomicInteger.getAndIncrement();

System.out.println(result);
System.out.println(atomicInteger.get());
# 输出结果

10
11
  1. incrementAndGet 方法
AtomicInteger atomicInteger = new AtomicInteger(10);

int result = atomicInteger.incrementAndGet();

System.out.println(result);
System.out.println(atomicInteger.get());
# 输出结果

11
11
  1. getAndDecrement 方法
AtomicInteger atomicInteger = new AtomicInteger(10);

int result = atomicInteger.getAndDecrement();

System.out.println(result);
System.out.println(atomicInteger.get());
# 输出结果

10
9
  1. decrementAndGet 方法
AtomicInteger atomicInteger = new AtomicInteger(10);

int result = atomicInteger.decrementAndGet();

System.out.println(result);
System.out.println(atomicInteger.get());
# 输出结果

9
9
  1. getAndAdd 方法
AtomicInteger atomicInteger = new AtomicInteger(10);

int result = atomicInteger.getAndAdd(5);

System.out.println(result);
System.out.println(atomicInteger.get());
# 输出结果

10
15
  1. addAndGet 方法
AtomicInteger atomicInteger = new AtomicInteger(10);

int result = atomicInteger.addAndGet(5);

System.out.println(result);
System.out.println(atomicInteger.get());
# 输出结果

15
15

四、高级操作方法

1、基本介绍
boolean compareAndSet(int expectedValue, int newValue)
  1. 如果当前值等于 expectedValue,则允许设置为 newValue,如果设置,返回 true,不过不设置,返回 false
int updateAndGet(IntUnaryOperator updateFunction)
  1. 更新当前值并返回更新后的值,将函数的返回值作为新值
int getAndUpdate(IntUnaryOperator updateFunction)
  1. 获取当前值然后更新,将函数的返回值作为新值
int accumulateAndGet(int x, IntBinaryOperator accumulatorFunction)
  1. 给定值与当前值合并,并返回合并后的结果,将函数的返回值作为新值
int getAndAccumulate(int x, IntBinaryOperator accumulatorFunction)
  1. 获取当前值,然后将给定值与当前值合并,将函数的返回值作为新值
2、演示
  1. compareAndSet 方法
AtomicInteger atomicInteger = new AtomicInteger(10);

boolean result1 = atomicInteger.compareAndSet(20, 30);
System.out.println(result1);
System.out.println(atomicInteger.get());

boolean result2 = atomicInteger.compareAndSet(10, 30);
System.out.println(result2);
System.out.println(atomicInteger.get());
# 输出结果

false
10
true
30
  1. updateAndGet 方法
AtomicInteger atomicInteger = new AtomicInteger(10);

int result = atomicInteger.updateAndGet(value -> value * 2);
System.out.println(result);
System.out.println(atomicInteger.get());
# 输出结果

20
20
  1. getAndUpdate 方法
AtomicInteger atomicInteger = new AtomicInteger(10);

int result = atomicInteger.getAndUpdate(value -> value * 2);
System.out.println(result);
System.out.println(atomicInteger.get());
# 输出结果

10
20
  1. accumulateAndGet 方法
AtomicInteger atomicInteger = new AtomicInteger(10);

int result = atomicInteger.accumulateAndGet(2, (x, y) -> {
    System.out.println("x: " + x);
    System.out.println("y: " + y);
    return x * y;
});

System.out.println(result);
System.out.println(atomicInteger.get());
# 输出结果

x: 10
y: 2
20
20
  1. getAndAccumulate 方法
AtomicInteger atomicInteger = new AtomicInteger(10);

int result = atomicInteger.getAndAccumulate(2, (x, y) -> {
    System.out.println("x: " + x);
    System.out.println("y: " + y);
    return x * y;
});

System.out.println(result);
System.out.println(atomicInteger.get());
# 输出结果

x: 10
y: 2
10
20

你可能感兴趣的:(Java,-,精美笔记,java,开发语言,java-ee,后端,intellij-idea,intellij,idea,笔记)