AtomicBoolean原子布尔

时间:2020-01-09 10:36:24  来源:igfitidea点击:

AtomicBoolean类为我们提供了一个布尔变量,该变量可以原子地读写,并且还包含诸如compareAndSet()之类的高级原子操作。 " AtomicBoolean"类位于" java.util.concurrent.atomic"包中,因此完整的类名是" java.util.concurrent.atomic.AtomicBoolean"。这段文字描述了Java 8中的" AtomicBoolean"版本,但第一个版本是在Java 5中添加的。

我的Java并发性教程中有关"比较和交换"的文本中解释了" AtomicBoolean"设计背后的原因。

创建一个AtomicBoolean

我们可以这样创建一个" AtomicBoolean":

AtomicBoolean atomicBoolean = new AtomicBoolean();

这个例子创建了一个新的AtomicBoolean,其值为false。

如果我们需要为AtomicBoolean实例设置一个明确的初始值,可以将初始值传递给AtomicBoolean构造函数,如下所示:

AtomicBoolean atomicBoolean = new AtomicBoolean(true);

获取AtomicBoolean的值

我们可以使用get()方法获取AtomicBoolean的值。这是一个例子:

AtomicBoolean atomicBoolean = new AtomicBoolean(true);

boolean value = atomicBoolean.get();

执行此代码后,"值"变量将包含值" true"。

设置AtomicBoolean的值

我们可以使用set()方法来设置AtomicBoolean的值。这是一个例子:

AtomicBoolean atomicBoolean = new AtomicBoolean(true);

atomicBoolean.set(false);

执行此代码后," AtomicBoolean"变量将包含值" false"。

交换AtomicBoolean的值

我们可以使用getAndSet()方法交换AtomicBoolean的值。 " getAndSet()"方法返回" AtomicBoolean"的当前值,并为其设置一个新值。这是一个例子:

AtomicBoolean atomicBoolean = new AtomicBoolean(true);

boolean oldValue = atomicBoolean.getAndSet(false);

执行完此代码后," oldValue"变量将包含值" true",而" AtomicBoolean"实例将包含值" false"。该代码有效地将值" false"交换为" AtomicBoolean"的当前值" true"。

比较并设置AtomicBoolean的值

方法compareAndSet()允许我们将AtomicBoolean的当前值与期望值进行比较,如果当前值等于期望值,则可以在AtomicBoolean上设置一个新值。 compareAndSet()方法是原子的,因此只有一个线程可以同时执行它。因此,compareAndSet()方法可用于实现简单的同步器,如锁。

这是一个" compareAndSet()"示例:

AtomicBoolean atomicBoolean = new AtomicBoolean(true);

boolean expectedValue = true;
boolean newValue      = false;

boolean wasNewValueSet = atomicBoolean.compareAndSet(
    expectedValue, newValue);

本示例将" AtomicBoolean"的当前值与" true"进行比较,如果两个值相等,则将" AtomicBoolean"的新值设置为" false"。