gpt4 book ai didi

java - 与 System.out 关联的 Java 线程的奇怪行为

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

<分区>

我有一个简单的 TestThreadClientMode 类来测试竞争条件。我尝试了两次:

  1. 当我运行以下代码并在第二个线程中注释 System.out.println(count); 时,输出为:

操作系统:Windows 8.1
标志完成设置为真
...

第二个线程永远存在。因为第二个线程永远不会看到由主线程设置为 true 的 done 标志的变化。

  1. 当我取消注释 System.out.println(count); 时,输出是:

    操作系统:Windows 8.1
    0
    ...
    190785
    190786
    标志完成设置为真
    完毕! Thread-0 true

程序在 1 秒后停止。

System.out.println(count); 如何让第二个线程看到 done 的变化?

代码

public class TestThreadClientMode {
private static boolean done;
public static void main(String[] args) throws InterruptedException {
new Thread(new Runnable() {
public void run() {
int count = 0;
while (!done) {
count ++;
//System.out.println(count);
}
System.out.println("Done! " + Thread.currentThread().getName() + " " + done);
}
}).start();
System.out.println("OS: " + System.getProperty("os.name"));

Thread.sleep(1000);
done = true;

System.out.println("flag done set true ");
}
}

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