AtomicInteger 概述
AtomicInteger 类是 Java 并发包(java.util.concurrent.atomic)中的一员。它提供了一种线程安全的方式来对整型变量进行原子操作。通过使用 AtomicInteger 类,开发者可以在多线程环境中对整型变量进行安全地增加、减少等操作,而不需要使用显式的同步机制。
常用方法
下面是 AtomicInteger
类中一些常用的方法:
- get():获取当前的整型值。
- set(int newValue):设置为指定的新值。
- getAndSet(int newValue):设置为指定的新值,并返回旧值。
- incrementAndGet():原子地将当前值加1,然后返回增加后的值。
- decrementAndGet():原子地将当前值减1,然后返回减少后的值。
- getAndIncrement():返回当前值,然后将当前值加1。
- getAndDecrement():返回当前值,然后将当前值减1。
- addAndGet(int delta):原子地将给定值与当前值相加,然后返回相加后的值。
- getAndAdd(int delta):返回当前值,然后将给定值与当前值相加。
- compareAndSet(int expect, int update):如果当前值等于预期值,则原子地将该值设置为给定的更新值。
示例代码
下面是一个示例代码,演示了 AtomicInteger
类中一些常用的方法的合集:
import java.util.concurrent.atomic.AtomicInteger; public class AtomicIntegerMethodsExample { public static void main(String[] args) { // 创建一个初始值为0的AtomicInteger对象 AtomicInteger atomicInt = new AtomicInteger(0); // 1. get() 方法:获取当前的整型值 int currentValue = atomicInt.get(); System.out.println("Current value: " + currentValue); // 2. set(int newValue) 方法:设置为指定的新值 atomicInt.set(10); System.out.println("New value after set: " + atomicInt.get()); // 3. getAndSet(int newValue) 方法:设置为指定的新值,并返回旧值 int oldAndNewValue = atomicInt.getAndSet(20); System.out.println("Old value: " + oldAndNewValue); System.out.println("Value after getAndSet: " + atomicInt.get()); // 4. incrementAndGet() 方法:原子地将当前值加1,并返回增加后的值 int incrementedValue = atomicInt.incrementAndGet(); System.out.println("Incremented value: " + incrementedValue); // 5. decrementAndGet() 方法:原子地将当前值减1,并返回减少后的值 int decrementedValue = atomicInt.decrementAndGet(); System.out.println("Decremented value: " + decrementedValue); // 6. addAndGet(int delta) 方法:原子地将给定值与当前值相加,并返回相加后的值 int addResult = atomicInt.addAndGet(5); System.out.println("Value after addAndGet: " + addResult); // 7. getAndAdd(int delta) 方法:返回当前值,然后将给定值与当前值相加 int oldValue = atomicInt.getAndAdd(8); System.out.println("Old value before getAndAdd: " + oldValue); System.out.println("Value after getAndAdd: " + atomicInt.get()); // 8. compareAndSet(int expect, int update) 方法:如果当前值等于预期值,则原子地将该值设置为给定的更新值 boolean isSuccess = atomicInt.compareAndSet(33, 100); // 如果当前值是33,则设置为100 System.out.println("compareAndSet result: " + isSuccess); System.out.println("Value after compareAndSet: " + atomicInt.get()); } }
结论
AtomicInteger 类提供了一种简单且高效的方式来实现对整型变量的原子操作。通过使用 AtomicInteger 类,开发者可以避免使用显式的同步机制(如 synchronized 关键字),从而提高程序的并发性能。在多线程环境中,特别是需要频繁对整型变量进行操作的情况下,建议使用 AtomicInteger 类来确保操作的线程安全性。