gpt4 book ai didi

Java 并发实践 list 3.1

转载 作者:行者123 更新时间:2023-11-30 03:35:32 25 4
gpt4 key购买 nike

我正在阅读《Java 并发实践》,到目前为止,它非常有趣

我遇到过 list 3.1 中的以下代码示例:

public class NoVisibility {
private static boolean ready;
private static int number;
private static class ReaderThread extends Thread {
public void run() {
while (!ready)
Thread.yield();
System.out.println(number);
}
}
public static void main(String[] args) {
new ReaderThread().start();
number = 42;
ready = true;
}
}

我理解理论上这个代码片段可能会出错。

我决定亲自去检查一下,所以我将代码输入到我的 IDE 中并运行了大约 40 次,每次输出都是相同的:42。

所以我很好奇,我应该尝试运行多少次(统计上)直到看到失败的示例,为什么失败如此罕见?我尝试过搜索,但我发现的是:question about “Java Concurrency in Practice” example但这与我的问题无关,因为我确实了解它是如何发生的,但只是好奇为什么执行失败如此困难

谢谢:)

最佳答案

重新排序可以在 JIT 级别或 CPU 级别完成。您的代码太短,JIT 无法启动,因此必须是 CPU。

对于如此简单的操作,CPU 确实没有理由开始搞乱您的代码,因此您可能永远不会观察到重新排序,并且您的程序将始终打印 42。

该示例的要点并不是说它将会损坏,而是理论上可能损坏。

另请参阅:Why this broken program always runs?

关于Java 并发实践 list 3.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28003965/

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