gpt4 book ai didi

java同步线程说明

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

这个程序的答案在 5 秒后必须是“更改完成”,但我得到“更改完成”和“完成”。我没有同步的 getDone 方法。任何想法我正在为线程完成处理做什么。

public class Main {
private static boolean done = false;
private static int count;

public static void main(String[] args)throws InterruptedException {
new Thread(() -> {
while (!getDone()) {
count = count + 1;
}
System.out.println("DONE!!!!");
}).start();
Thread.sleep(5000);
System.out.println("Changing done");
synchronized (Main.class) {
done = true;
}
}

public static boolean getDone() {
return done;
}
}

最佳答案

如果您没有正确同步对done 的访问,这意味着您的代码可能 失败,即线程可能 看不到更新的值(value)。

这并不意味着除非正确同步,否则该值保证不可见。因此,在许多情况下,对 done 的写入仍然可见(在许多情况下,损坏的代码仍然有效的事实使并发编程变得更加困难)。只是不能保证在所有情况下都有效。

关于java同步线程说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40093880/

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