java.util.concurrent.atomic
)中的一个类,它提供了一种线程安全的整数操作方式,它有如下特点原子性操作保证
可见性操作保证,遵循 happens-before 规则
基于 CAS 的无锁算法
AtomicInteger()
AtomicInteger(int initialValue)
AtomicInteger atomicInteger1 = new AtomicInteger();
AtomicInteger atomicInteger2 = new AtomicInteger(10);
int get()
void set(int newValue)
int getAndSet(int newValue)
int getAndIncrement()
int incrementAndGet()
int getAndDecrement()
int decrementAndGet()
int getAndAdd(int delta)
int addAndGet(int delta)
AtomicInteger atomicInteger = new AtomicInteger(10);
System.out.println(atomicInteger.get());
atomicInteger.set(20);
System.out.println(atomicInteger.get());
# 输出结果
10
20
AtomicInteger atomicInteger = new AtomicInteger(10);
int result = atomicInteger.getAndSet(20);
System.out.println(result);
System.out.println(atomicInteger.get());
# 输出结果
10
20
AtomicInteger atomicInteger = new AtomicInteger(10);
int result = atomicInteger.getAndIncrement();
System.out.println(result);
System.out.println(atomicInteger.get());
# 输出结果
10
11
AtomicInteger atomicInteger = new AtomicInteger(10);
int result = atomicInteger.incrementAndGet();
System.out.println(result);
System.out.println(atomicInteger.get());
# 输出结果
11
11
AtomicInteger atomicInteger = new AtomicInteger(10);
int result = atomicInteger.getAndDecrement();
System.out.println(result);
System.out.println(atomicInteger.get());
# 输出结果
10
9
AtomicInteger atomicInteger = new AtomicInteger(10);
int result = atomicInteger.decrementAndGet();
System.out.println(result);
System.out.println(atomicInteger.get());
# 输出结果
9
9
AtomicInteger atomicInteger = new AtomicInteger(10);
int result = atomicInteger.getAndAdd(5);
System.out.println(result);
System.out.println(atomicInteger.get());
# 输出结果
10
15
AtomicInteger atomicInteger = new AtomicInteger(10);
int result = atomicInteger.addAndGet(5);
System.out.println(result);
System.out.println(atomicInteger.get());
# 输出结果
15
15
boolean compareAndSet(int expectedValue, int newValue)
int updateAndGet(IntUnaryOperator updateFunction)
int getAndUpdate(IntUnaryOperator updateFunction)
int accumulateAndGet(int x, IntBinaryOperator accumulatorFunction)
int getAndAccumulate(int x, IntBinaryOperator accumulatorFunction)
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
AtomicInteger atomicInteger = new AtomicInteger(10);
int result = atomicInteger.updateAndGet(value -> value * 2);
System.out.println(result);
System.out.println(atomicInteger.get());
# 输出结果
20
20
AtomicInteger atomicInteger = new AtomicInteger(10);
int result = atomicInteger.getAndUpdate(value -> value * 2);
System.out.println(result);
System.out.println(atomicInteger.get());
# 输出结果
10
20
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
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