java.util.concurrent.atomic.AtomicBoolean Example
In this example, we shall be demonstrating the use of java.util.concurrent.atomic.AtomicBoolean
Class added in Java 5.
The AtomicBoolean
class is used to update a boolean
value atomically i.e. only one thread can modify the boolean
variable at a time. It provides two constructors, a parameterless one with default value as false
and a constructor with argument as initial boolean
value.
It also provides a lazySet(boolean newvalue)
method for non-blocking data-structures.(Avoiding costly storeLoad Barriers
).
Here is a small program demostrating the use of java.util.concurrent.atomic.AtomicBoolean
Class :
AtomicBooleanExample.java:
package com.javacodegeeks.examples.concurrent; import java.util.concurrent.atomic.AtomicBoolean; public class AtomicBooleanExample { public static void main(String[] args) { final AtomicBoolean atomicBoolean = new AtomicBoolean(false); new Thread("T1") { public void run() { while(true){ System.out.println(Thread.currentThread().getName() +" Waiting for T2 to set Atomic variable to true. Current value is " +atomicBoolean.get()); if(atomicBoolean.compareAndSet(true, false)) { System.out.println("Finally I can die in peace!"); break; } }}; }.start(); new Thread("T2") { public void run() { System.out.println(Thread.currentThread().getName() +atomicBoolean.get()); System.out.println(Thread.currentThread().getName() +" is setting the variable to true "); atomicBoolean.set(true); }; }.start(); } }
OUTPUT : T1 Waiting for T2 to set Atomic variable to true. Current value is false T1 Waiting for T2 to set Atomic variable to true. Current value is false T2false T2 is setting the variable to true false T2true T1 Waiting for T2 to set Atomic variable to true. Current value is false Finally I can die in peace!
In the above example, the AtomicBoolean
variable is initialized to false
. Thread T1
waits for the other thread T2
to set it to true
. Once the thread sets it to true
, the thread T1
finally, terminates.
Thus we see that, the AtomicBoolean
class offers the same functionality as the volatile
variable with the same memory semantics at a far lower cost.
Locks vs AtomicBoolean Performance
Locks perform better, under very high contention, however, AtomicBoolean
performs better under low and medium contention.
AtomicBoolean
is not a substitute for synchronize
. Understand the use case properly before going for either.Conclusion
Thus, we have studied how we can use the AtomicBoolean
Class in our applications.
You can download the source code of this example here: AtomicBooleanExample.zip