java volatile与原子布尔
我有一个线程每5分钟定期运行一次,它可能会更改一个标志的值,许多线程会读取该标志。请建议以下设计是否有任何问题。我选择volatile,这样每个线程都可以获得正确的标志值,而不需要缓存。我认为原子布尔在这里没有多大意义
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();
}
}
}
# 1 楼答案
AtomicBoolean和volatile在您的使用中具有完全相同的语义(单个编写器),因此两者都可以工作。AtomicBoolean(或任何原子类)的情况是,您必须处理多个潜在的编写器