在这段代码中:
public class PossibleReordering {
static int x = 0, y = 0;
static int a = 0, b = 0;
public static void main(String[] args)
throws InterruptedException {
Thread one = new Thread(new Runnable() {
public void run() {
a = 1;
x = b;
}
});
Thread other = new Thread(new Runnable() {
public void run() {
b = 1;
y = a;
}
});
one.start(); other.start();
one.join(); other.join();
System.out.println("( "+ x + "," + y + ")");
}
}
他们说Java编译器将重新排序线程一和线程另一中的指令以优化其执行,并最终导致结果(0,0)。
他们还说:
线程中的每个动作都发生在该线程中的每个动作之前,这些动作在程序顺序的后面出现。
这两种说法是否相互冲突?