AtomicBoolean
Jakob Jenkov |
The AtomicBoolean
class provides you with a boolean
variable which can be read and written
atomically, and which also contains advanced atomic operations like compareAndSet()
. The AtomicBoolean
class is located in the java.util.concurrent.atomic
package, so the full class name is
java.util.concurrent.atomic.AtomicBoolean
. This text describes the version of AtomicBoolean
found in Java 8, but the first version was added in Java 5.
The reasoning behind the AtomicBoolean
design is explained in my Java Concurrency tutorial in the text about
Compare and Swap.
Creating an AtomicBoolean
You create an AtomicBoolean
like this:
AtomicBoolean atomicBoolean = new AtomicBoolean();
This example creates a new AtomicBoolean
with the value false
;
If you need to set an explicit initial value for the AtomicBoolean
instance, you can pass the initial
value to the AtomicBoolean
constructor like this:
AtomicBoolean atomicBoolean = new AtomicBoolean(true);
Getting the AtomicBoolean's Value
You can get the value of an AtomicBoolean
using the get()
method. Here is an example:
AtomicBoolean atomicBoolean = new AtomicBoolean(true); boolean value = atomicBoolean.get();
After executing this code the value
variable will contain the value true
.
Setting the AtomicBoolean's Value
You can set the value of an AtomicBoolean
using the set()
method. Here is an example:
AtomicBoolean atomicBoolean = new AtomicBoolean(true); atomicBoolean.set(false);
After executing this code the AtomicBoolean
variable will contain the value false
.
Swapping the AtomicBoolean's Value
You can swap the value of an AtomicBoolean
using the getAndSet()
method.
The getAndSet()
method returns the AtomicBoolean
's current value, and sets a new value
for it. Here is an example:
AtomicBoolean atomicBoolean = new AtomicBoolean(true); boolean oldValue = atomicBoolean.getAndSet(false);
After executing this code the oldValue
variable will contain the value true
,
and the AtomicBoolean
instance will contain the value false
. The code effectively
swaps the value false
for the AtomicBoolean
's current value which is true
.
Compare and Set AtomicBoolean's Value
The method compareAndSet()
allows you to compare the current value of the AtomicBoolean
to an expected value, and if current value is equal to the expected value, a new value can be set on the
AtomicBoolean
. The compareAndSet()
method is atomic, so only a single thread can execute
it at the same time. Thus, the compareAndSet()
method can be used to implemented simple synchronizers
like locks.
Here is a compareAndSet()
example:
AtomicBoolean atomicBoolean = new AtomicBoolean(true); boolean expectedValue = true; boolean newValue = false; boolean wasNewValueSet = atomicBoolean.compareAndSet( expectedValue, newValue);
This example compares the current value of the AtomicBoolean
to true
and if the
two values are equal, sets the new value of the AtomicBoolean
to false
.
Tweet | |
Jakob Jenkov |