gpt4 book ai didi

java - 同步作为 volatile 声明的替代方案

转载 作者:行者123 更新时间:2023-12-01 09:20:27 25 4
gpt4 key购买 nike

在本关于 Java volatile 声明的教程 (link) 中, volatile 声明可以作为同步的替代方案。

作者使用 volatile 声明的示例:

volatile boolean shutdownRequested;

...

public void shutdown() { shutdownRequested = true; }

public void doWork() {
while (!shutdownRequested) {
// do stuff
}
}

我天真的同步实现是:

volatile boolean shutdownRequested;

...

synchronized public void shutdown() { shutdownRequested = true; }

synchronized public void doWork() {
while (!shutdownRequested) {
// do stuff
}
}

看起来,如果线程 A 调用 shutdown,而线程 B 已经调用并正在运行 doWork,那么线程 B 将持续锁定执行,因为它是一个环形。这似乎没有给线程 A 访问 boolean 值的机会。作者对于 volatile 声明的同步替代方案有何想法?

最佳答案

//do stuff 部分将位于同步块(synchronized block)之外。例如,您可以使用 while (!getShutDown()),而不是同步 doWork 并使用 while (!shutdownRequested),其中 getShutDown 是返回 shutdownRequested 的同步方法。

关于java - 同步作为 volatile 声明的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40199967/

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