gpt4 book ai didi

java - Java 中的惰性 boolean 关闭标志是否需要 volatile ?

转载 作者:行者123 更新时间:2023-12-01 07:57:22 25 4
gpt4 key购买 nike

假设以下代码

public class Singleton {

boolean shuttingDown = false;


void action() {
if (shuttingDown) {
throw new RuntimeException("already shutting down");
}
// do some more stuff
}

// Called by a single thread only
void onShutDown() {
shuttingDown = true;
// perform some more actions to remedy the class
}
}

基本上,我想阻止所有即将到来的对 action() 的调用,但有异常(exception)。我知道设置 shutdownDown 是一个原子操作。然而问题是我是否需要使 shuttingDown 变得易失,以使更改对其他线程可见,这些线程可能会从线程池中重新使用。

我看到了this oracle tutorial还有 AtomicBoolean 上的 javadoc 。然而后者uses volatile , 也。我只在单个线程中设置该值一次,因此不需要 AtomicBoolean 提供的锁定机制。我只想在变量更新后立即使更改对所有线程可见。

据我了解oracle教程,更新操作是原子的,即在设置值时没有其他线程可以拦截。问题是,更新后的值何时会填充到其他线程(如果有的话?)。

最佳答案

简短的回答是肯定的,您必须使其变得不稳定。

虽然该操作是原子的,但为了保证它对其他线程可见,您需要建立一个发生在关系之前。 volatile 是最简单的方法。

关于java - Java 中的惰性 boolean 关闭标志是否需要 volatile ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28304116/

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