gpt4 book ai didi

java - 可见性没有出现在我的 java 代码中

转载 作者:行者123 更新时间:2023-12-02 02:57:26 25 4
gpt4 key购买 nike

我正在阅读《Java并发实践》。当我阅读代码时:

  public class NoVisibility
{
private static boolean ready;
private static int number;

private static class ReaderThread extends Thread
{
@Override
public void run()
{
System.out.println(ready+"\t"+number);
while (!ready)
{
Thread.yield();
}
System.out.println(number);
}
}


public static void main(String[]args) throws InterruptedException
{
new ReaderThread( ).start();
Thread.sleep(4000);
number = 42;
ready =true;


}
}

书上说循环会无限循环,但是当我在java8中运行它时,结果是这样的:

false   0
42

为什么它没有显示可见性问题?

最佳答案

使用 lambda 表达式初始化的线程将立即开始循环。您可以通过将 print 语句放入第一个 while 循环中来看到这一点。

然后,大约 1 秒后,创建第一个线程的另一个线程更改了 ready 的值。一旦此更改生效,带有 !ready 的第一个 while 循环就会停止。

您在创建示例时犯了一个错误,或者那本书是错误的。换句话说:就绪可见两个线程;这段代码中没有任何内容可以解释您的期望。

关于java - 可见性没有出现在我的 java 代码中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42870226/

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