我目前正在学习并发编程考试,不明白为什么这个程序的输出是43。为什么x = y + 1
之前执行t.start()
?我还应该解释我使用了哪些发生之前的规则。
如果我理解程序顺序规则(线程中的每个动作发生 - 在该线程中稍后在程序顺序中出现的每个动作之前)t.start()
必须在之前执行,x = y + 1
以便线程 t 复制变量x
,该变量将为 1。
public class HappensBefore {
static int x = 0;
static int y = 42;
public static void main(String[] args) {
x = 1;
Thread t = new Thread() {
public void run() {
y = x;
System.out.println(y);
};
};
t.start();
x = y + 1;
}