考虑下面的 Java 示例。请注意,没有一个类成员变量被声明为volatile
. 如果我正确理解了内存模型和“发生在之前”规则,Java 实现可以优化该run()
方法,使其永远运行,即使另一个线程调用该stopNow()
方法。发生这种情况是因为该run()
方法中没有强制线程stop
多次读取值的内容。那是对的吗?如果不是,为什么不呢?
class Example implements Runnable {
boolean stop = false;
int value = 0;
public void stopNow() {
stop = true;
}
public int getValue() {
return value;
}
@Override
public void run() {
// Loop until stop is set to true.
while (!stop) {
++value;
}
return;
}
}