AtomicBoolean原子布尔
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"。