【发布时间】:2014-08-23 06:00:03
【问题描述】:
在chapter 17 of Java language specification 中,有一段解释了为什么“在一致性之前发生是不够的”。这是一个例子:
At first, x = y = 0
Thread 1 | Thread 2
r1 = x; | r2 = y;
if (r1 != 0) y = 1; | if (r2 != 0) x = 1;
这是一个可能的执行跟踪:
r1 = x; // sees write of x = 1
y = 1;
r2 = y; // sees write of y = 1
x = 1;
怎么会这样?我感到困惑的是,当第一个动作看到 x = 1 时,这是否意味着条件 r2 != 0 已变为真,因此 y 已分配给 1 ?但是按照这个顺序,y = 1 在 r1 = x 之后。我在哪里弄错了理解这个例子?我应该如何正确解释这个例子?
【问题讨论】:
-
"没有顺序一致的执行"
标签: java concurrency parallel-processing x86 jvm