Java 中 ++ 操作符是线程安全的吗?
·
更多面试题请看这里:https://interview.raoyunsoft.com/
不是线程安全的。++ 操作符(自增操作)在多线程环境下存在竞态条件(Race Condition),因为它本质上是复合操作,包含三个独立步骤:
- 读取变量的当前值
- 增加该值
- 写回新值到内存
当多个线程同时执行 ++ 操作时,这些步骤可能交叉执行,导致最终结果不符合预期。
❌ 非线程安全示例
public class Counter {
private int count = 0;
public void increment() {
count++; // 非线程安全
}
public int getCount() {
return count;
}
}
若两个线程同时调用 increment(),可能出现以下情况:
最终 count 的值可能是 1 而非预期的 2。
✅ 线程安全解决方案
- 使用
synchronized同步
public synchronized void increment() {
count++;
}
- 使用
AtomicInteger(推荐)
private AtomicInteger count = new AtomicInteger(0);
public void increment() {
count.incrementAndGet(); // 原子操作
}
AtomicInteger 通过 CAS(Compare-And-Swap)机制保证原子性,无需锁竞争。
关键结论
| 方案 | 线程安全 | 性能 | 适用场景 |
|---|---|---|---|
++ 操作符 |
❌ 不安全 | 高 | 单线程环境 |
synchronized |
✅ 安全 | 中低 | 简单同步 |
AtomicInteger |
✅ 安全 | 高 | 高并发计数 |
💡 实际开发中,优先选择
AtomicInteger等原子类,避免显式锁带来的性能开销。
更多推荐



所有评论(0)