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)