Java并发07:线程安全问题的本质 - 从一个计数器说起

引言:一个不准的计数器 public class Counter { private int count = 0; public void increment() { count++; // 看似简单的一行代码 } public int getCount() { return count; } } 测试:100个线程各执行1000次increment() Counter counter = new Counter(); for (int i = 0; i < 100; i++) { new Thread(() -> { for (int j = 0; j < 1000; j++) { counter.increment(); } }).start(); } // 期望:100,000 // 实际:95,732(每次不同!) 为什么? 一、count++不是原子操作 1.1 字节码分析 count++; // 一行代码 实际执行: 1. LOAD count // 读取count的值到寄存器 2. ADD 1 // 寄存器值+1 3. STORE count // 写回count 1.2 时序问题 时间 线程A 线程B count t1 LOAD count=0 0 t2 LOAD count=0 0 t3 ADD (寄存器=1) 0 t4 ADD (寄存器=1) 0 t5 STORE count=1 1 t6 STORE count=1 1 期望结果:2 实际结果:1 结论:非原子操作 + 多线程 = 数据竞争 ...

2025-11-20 · maneng

如约数科科技工作室

浙ICP备2025203501号

👀 本站总访问量 ...| 👤 访客数 ...| 📅 今日访问 ...