我有一个每5分钟定期运行的线程,它可能会更改一个标志的值,许多线程会读取该标志。如果以下设计有任何问题,请建议。我选择volatile,所以每个线程都获得正确的flag值,没有缓存。我没有看到AtomicBoolean在这里有道理。
Class A {
private static volatile boolean flag = false;
//Calls every 5 minutes
//Value of this flag may change every 5 minutes by thread.
checkAndSetFlag(boolean newFlag) {
flag= newFlag;
}
}
许多线程只会按如下方式检查值。如果某些线程在值发生变化的同时读取旧值,我就没有问题。
Class B {
doSomething() {
if(A.flag) {
doSomethingElse();
}
}
}
答案 0 :(得分:0)
AtomicBoolean和volatile在您的使用中具有完全相同的语义(单个编写器),因此任何一个都可以工作。 AtomicBoolean(或任何Atomic类)的情况是你必须处理多个潜在的编写者。