AtomicInteger 加减法
时间: 2024-08-13 16:01:05 浏览: 57
`AtomicInteger` 是 Java 中 `java.util.concurrent.atomic` 包下提供的一种线程安全的整数类型变量。它主要用于在并发环境下对整数值的操作,并保证操作的原子性、可见性和有序性。
### `AtomicInteger` 的加减法
在并发环境中,直接使用普通 `int` 类型来进行加减操作可能导致数据竞争和竞态条件,因为多个线程同时访问共享内存位置可能会导致不可预测的结果。而使用 `AtomicInteger` 可以避免这些问题。
#### 使用示例:
```java
import java.util.concurrent.atomic.AtomicInteger;
public class AtomicIntegerExample {
private static final AtomicInteger counter = new AtomicInteger(0);
public static void main(String[] args) {
// 模拟线程执行
Thread thread1 = new Thread(() -> add(counter));
Thread thread2 = new Thread(() -> add(counter));
thread1.start();
thread2.start();
try {
thread1.join();
thread2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Final count: " + counter.get());
}
private static void add(AtomicInteger atomicInt) {
for (int i = 0; i < 1000000; i++) {
atomicInt.incrementAndGet(); // 等价于 atomicInt = atomicInt + 1;
}
}
}
```
在这个例子中,我们创建了一个 `AtomicInteger` 实例,并在其上实现了两个并发线程,每个线程都会将计数递增一百万次。尽管这些操作在不同的线程中并行执行,但是由于 `incrementAndGet()` 方法的原子性质,最终结果始终是准确无误的。
### `AtomicInteger` 的关键特性
- **原子性**:`AtomicInteger` 提供的所有基本操作都是原子性的,这意味着它们被视为不可分割的操作,一次完成整个操作,不会因其他线程中断而导致不确定性。
- **可见性**:当一个线程修改了 `AtomicInteger` 的值后,其它所有线程都能够立即看到这个新的值。这消除了多线程环境下的可见性问题。
- **有序性**:`AtomicInteger` 还可以提供内存模型的有序性保证,使得操作顺序不会受到编译优化的影响。
总之,当你需要在一个并发环境下对整数值进行操作,且希望确保操作的原子性、可见性和有序性时,使用 `AtomicInteger` 就是一个不错的选择。
阅读全文