问题1
volatile禁止指令重排,那么禁止的时change这个方法那里的重排序?是a = 3不会在b = 3之后吗?如果是的话b = 3前面如果有很多代码都会按照书写顺序执行吗?
int a = 1;
volatile int b = 2;
private void change() {
a = 3;
b = 3;
}
private void print() {
System.out.println("b = " + b + ", a = " + a);
}
问题2
上面的print代码输出的时候是否能够保证a与b都等于3?如果说问题1假设成立的话那么是能够保证的。
但是 https://coding.imooc.com/learn/questiondetail/vQW1lYEEVVmYyE9A.html 这里说“就算b不涉及a,也可以只给b加volatile,因为只要修改了b,那么之前的代码(对a的修改)就可见。”
https://coding.imooc.com/learn/questiondetail/y0K5g681gnmPe2QN.html 这里又说不能保证,实在是搞晕了,求老师解答