概要
可以原子方式更新的布尔值。有关原子访问属性的说明,请参阅 VarHandle 规范。原子布尔值用于原子更新flag等应用程序,不能用作Boolean的替代品。
内部维护了一个voilate 的 int 变量,该值代表当前值
private volatile int value;
其余方法依赖 VarHandle类的方法实现原子的更新值。
Volatile boolean 和 AtomicBoolean的不同之处
使用 AtomicBoolean 所有读取和写入操作都是原子的。对于volatile 布尔值,当两个线程同时访问变量时,您仍然需要处理竞争条件。即AtomicBoolean可以保证原子性,volatile能确保内存可见性
private volatile boolean isStart;
private AtomicBoolean atomicBooleanStart =new AtomicBoolean(false);
public void start() {
if(!isStart) {
isStart = true;
//do something
}
}
public void stop() {
if (atomicBooleanStart.compareAndSet(false, true)) {
//doSomething
}
}
分享到: