关于重排序和可见性结果

来源:12-10 可见性问题

丨木頭丶吅

2020-10-16

先上代码,和课程一样:

	int a = 1;
	int b = 2;

    private void change() {
        a = 3;
        b = a;
    }

    private void print() {
        System.out.println("b=" + b + ",a=" + a);
    }

我想问以下两种情况会不会发生,虽然我执行了很久都没有捕获到:
考虑到重排序影响,会不会出现change里面重排序成:
b=a;
a=3
打印b、a
最后输出结果就是b=1,a=3呢?

可见性+重排序,是不是可能会执行为:
b=a;
打印b、a
a=3
最后就输出b=1,a=1的情况呢?

写回答

1回答

悟空

2020-10-16

由于a = 3;       b = a;这两句存在依赖关系,所以不会被重排序

0
1
丨木頭丶吅
感谢悟空老师,我不确定刚刚提到的是否会进行CPU指令重排序
2020-10-16
共1条回复

线程八大核心+Java并发原理及企业级并发解决方案

完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题

2512 学习 · 939 问题

查看课程