有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

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