java中+=运算符线程安全吗
时间: 2024-09-24 10:11:16 浏览: 36
在 Java 中,`+=` 运算符本身并不是线程安全的,它不是一个原子操作。如果你在一个多线程环境中对共享变量使用 `+=`,可能会导致数据竞争(Data Race),因为两个线程可能会同时读取和修改这个变量,然后结果可能会出错。
例如:
```java
int count = 0;
Thread t1 = new Thread(() -> {
for (int i = 0; i < 10000; i++) {
count += 1; // 不是线程安全的
}
});
Thread t2 = new Thread(() -> {
for (int i = 0; i < 10000; i++) {
count += 1; // 同样不是线程安全的
}
});
t1.start();
t2.start();
```
为了确保 `count` 的线性增加,在多线程环境下应该使用 `synchronized` 关键字、`AtomicInteger` 等并发工具类,或者使用 Java 5 引入的 `volatile` 关键字来保证其可见性和有序性。
阅读全文