Wolatile变量与原子变量之间的区别是什么?

elm*_*mar 1 java atomic volatile

如果我们只考虑get/set方法,它们是否相同?或者说,以下两段代码是等价的吗?

private volatile boolean a;
public boolean isA(){
    return a;
}
public void setA(boolean a){
    this.a = a;
}


private AtomicBoolean a;
public boolean isA(){
    return a.get();
}
public void setA(boolean a){
    this.a.set(a);
}
Run Code Online (Sandbox Code Playgroud)

dro*_*ert 7

Atomic*类的优点是它们的原子方法,如'getAndSet()'或'compareAndSet()',否则需要锁定.

如果您没有任何复合操作,例如只是想确保所有线程都看到'a'的最新值,那么volatile就足够了.

  • 只是为了使它明确,请注意`++`和` - `是复合动作,即使它们在代码中非常简洁. (3认同)