为什么说++value不是原子性的操作

demo:

public class CountTest {
    private int value;

    public void add() {
        ++value;
    }
}

使用javac编译CountTest.Java文件

javac CountTest.java 

获得CountTest.class文件。

再使用javap -c命令反编译CountTest.class文件

javap -c CountTest.class

看看它的汇编代码,如下:
在这里插入图片描述
从汇编代码中可以发现,++value被拆分成了2,5,6,7四个步骤,第2步获取当前value的值并放入栈顶,第5步把常量1(因为是+1)放入栈顶,第6步是把两个值相加,然后再把结果放入栈顶,第7步是把栈顶的结果值赋值给变量value。

总结

通过汇编代码可以看到,++value实际上做了4步操作,所以该操作不是原子性的。

猜你喜欢

转载自blog.csdn.net/weixin_38106322/article/details/107760860