gpt4 book ai didi

java - 使用 AtomicBoolean 而不是同步块(synchronized block)

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

假设我有一个包含 2 个实例变量和以下方法的类(针对这个问题进行了简化):

private final Object lock = new Object();
private boolean running;

public MyClass() {
synchronized(lock) {
running = false;
}
}
public void methodA() {
synchronized(lock) {
running = true;
}
}
public void methodB() {
synchronized(lock) {
if (!running) {
return;
}
}
}

我正在查看这段代码,在阅读了有关 AtomicBoolean 的内容后,我认为这里可能适合,尤其是在查看了 MyClass 构造函数和 methodA 之后。不过,我对 methodB 不太确定。

假设这些方法可以被多个线程调用,下面的方法是线程安全的吗?:

private AtomicBoolean running;

public MyClass() {
running = new AtomicBoolean(false);
}
public void methodA() {
running.set(true);
}
public void methodB() {
if (!running.get()) {
return;
}
}

running.get() 是否可以保证通过 running.set(true)running.set(false) 看到更新来自另一个线程?

最佳答案

在您的示例中,一个简单的 volatile boolean 就足够了,因为您似乎只是在执行原子操作。如果您需要 compareAndSet 等方法,AtomicBoolean 很有用。

所以在回答您的问题时,是的,当使用 volatile booleanAtomicBoolean 时,其他线程将看到变量的更新。

关于java - 使用 AtomicBoolean 而不是同步块(synchronized block),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35851648/

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