假设我有一个包含 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;
}
}
}
我正在查看这段代码,在阅读了 about 之后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)
从另一个线程看到更新?