gpt4 book ai didi

java - 尽管更新了值,线程仍陷入无限循环

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:06:41 25 4
gpt4 key购买 nike

我的 friend 给了我一个问题,要求我解释为什么程序会陷入无限循环。

public class Test {
private static boolean flag;
private static int count;

private static class ReaderThread extends Thread {
public void run() {
while (!flag)
Thread.yield();
System.out.println(count);
}
}

public static void main(String[] args) {
new ReaderThread().start();
count = 1;
flag = true;
}
}

我确信这不会发生。但它确实发生过一次(大概有 50 次)。

我无法解释这种行为。有什么我遗漏的吗?

最佳答案

摘自书籍 - Java Concurrency In Practice(此示例似乎取自书籍本身)。

当读取和写入发生在不同的线程中时,无法保证读取线程会及时看到另一个线程写入的值,甚至根本看不到,因为线程可能会缓存这些值。为了确保跨线程内存写入的可见性,您必须使用同步或将变量声明为volatile

关于java - 尽管更新了值,线程仍陷入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43956176/

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