, 首先 从工作内存中读取变量副本到执行引擎 ( 操作数栈 ) 中 , 然后 再 进行自增运算 , 最后 写回到线程工作内存中 , 这是
3
个操作 , 如果变量 在这
3
个操作的空档时间进行了修改..., 那么就会产生无法预知的效果 ;
总结一下 : 线程 A 的变量副本入操作数栈的时刻 , 该共享变量被线程 B 修改并且同步更新 , 此时入栈的这个变量自增是无效的 , 但是也算自增了
1
次...,
20
个线程执行完毕后的变量值应该是
200000
;
代码示例 :
public class Main {
private volatile static int count =...原子性 ;
在线程中对 int count = 0 进行累加操作 , 首先将变量 int count = 0 加载到线程工作内存的变量副本中 , 这里创建了
20
个线程 , 就会有
20
个线程对应的工作内存空间...19999
;
原子操作问题 : 线程中 , 对变量副本 count 进行自增操作 , 不是原子操作 , 首先 从工作内存中读取变量副本到执行引擎 ( 操作数栈 ) 中 , 然后 再 进行自增运算