为什么i++不是原子操作?一个让无数并发程序崩溃的“常识”原子性:不可分割的操作对于Java这样的高级语言,一条语句最终会被转换成多条处理器指令完成,例如上面代码中的count += 1,至少需要三条处理器指令。 1)指令1:把变量count从内存加载到处理器的寄存器; 2)指令2:在寄存器中执行+1操作; 3)指令3:将结果写入内存(缓存机制导致可能写入的是处理器缓存而不是内存)。 那么假设有两个线程A和B,同时执行 count+=1,可能存在如下情况: 1)线程A从内存加载count并执行count+=1,同时线程B从内存加载count并执行count+=1