用i++,会执行到一半,就被线程中断吗?
比如刚返回了i,还未自增。或者刚自增,还未返回自增前的i

解决方案 »

  1.   

    i++不是原子操作,一般分为加载,更新和保存三部,所以多线程共享该变量需要进行同步,连一些CPU指令码都可能被打断,更别说i++了
      

  2.   

    即使是原子操作,也需要进行内存的同步,涉及到java多线程内存模型的,你上网搜搜相关资料就知道了
      

  3.   

    当然会的,不管是否是共享的,线程是在抢到 CUP 后才能执行,是吧,如果是是私有的,CPU 也有切换的时候,也就是说LZ说的过程,执行到一半就死了,只能说,一般情况下,是不变。
      

  4.   

    会;
    i++有两步操作i+1;i=i+1;
    主要执行过程 从主存里面拿1.i副本2.修改i 3.更新主存。
    假如两个线程A,B
    A,B同时看到的都是0
    然后在+1,刷新主存,即使两个线程总共执行了两次++操作,实际上只是+了一次,当然这只是其中的情况。
      

  5.   

    当然会的,不管是否是共享的,线程是在抢到 CUP 后才能执行,如果是是私有的,CPU 也有切换的时候,也就是说LZ说的过程,执行到一半就死了,只能说,一般情况下,是不变的。
      

  6.   

    会的.可以用javap查看JVM指令:getfield    
    iconst_1    
    iadd
    putfieldi++分成了如上显示的四步