volatile与原子布尔值

时间:2015-10-01 02:00:54

标签: java multithreading

我有一个每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();
    } 
  }
}

1 个答案:

答案 0 :(得分:0)

AtomicBoolean和volatile在您的使用中具有完全相同的语义(单个编写器),因此任何一个都可以工作。 AtomicBoolean(或任何Atomic类)的情况是你必须处理多个潜在的编写者。