gpt4 book ai didi

java - 如果 getter 被标记为同步,为什么这段代码会完成?

转载 作者:行者123 更新时间:2023-11-29 04:16:14 25 4
gpt4 key购买 nike

为什么当方法 get() 标记为同步时这段代码成功完成,尽管字段 value 不是易变的?如果没有同步,它会无限期地在我的机器上运行(如预期的那样)。

public class MtApp {

private int value;

/*synchronized*/ int get() {
return value;
}

void set(int value) {
this.value = value;
}

public static void main(String[] args) throws Exception {
new MtApp().run();
}

private void run() throws Exception {
Runnable r = () -> {
while (get() == 0) ;
};
Thread thread = new Thread(r);
thread.start();
Thread.sleep(10);
set(5);
thread.join();
}
}

最佳答案

同步强制 this.value = value 发生在 get() 之前。

它确保更新值的可见性。

没有同步,就没有这样的保证。它可能有效,也可能无效。

关于java - 如果 getter 被标记为同步,为什么这段代码会完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52238526/

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