今天是:
带着程序的旅程,每一行代码都是你前进的一步,每个错误都是你成长的机会,最终,你将抵达你的目的地。
title

AtomicBoolean

 概要

可以原子方式更新的布尔值。有关原子访问属性的说明,请参阅 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
        }
    }
分享到:

专栏

类型标签

网站访问总量