gpt4 book ai didi

java - Java 内存模型中的 happens-before 规则

转载 作者:搜寻专家 更新时间:2023-10-31 08:08:50 25 4
gpt4 key购买 nike

我目前正在学习并发编程考试,不明白为什么这个程序的输出是 43。为什么 x = y + 1t.start() 之前执行?我还应该解释我使用了哪些发生在规则之前。

如果我理解程序顺序规则(线程中的每个 Action 发生在该线程中程序顺序中稍后出现的每个 Action 之前)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;
}

最佳答案

没有同步,没有volatile字段,没有锁​​定,没有原子字段。代码可以按任何顺序执行。

是的,t.start() 将在 x = y + 1 之前执行。但是启动线程并不意味着线程体在x = y + 1之前执行。它可以在 main() 的其余部分之前、之后或交错运行。

关于java - Java 内存模型中的 happens-before 规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48476916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com