I am trying to understand the difference between the two following code blocks
AtomicBoolean ab = new AtomicBoolean(false);
using the following to get and set state. .
ab.get();
ab.set(X);
vs.
private boolean ab = false;
private final Object myboollock = new Ojbect();
public void setAB(boolean state)
{
synchronized(myboollock)
{
ab = state;
}
}
public boolean getAB()
{
synchronized(myboollock)
{
return ab;
}
}
I need to thread protect a boolean, that is all, and have in the past used the later method, but would like to start to use Atomic objects, (if ) they are safe?,
If all you're trying to do is make getting and setting a single
boolean
value atomic, then yes - you can useAtomicBoolean
instead without any synchronization.Of course,
synchronized
allows a far wider range of uses, such as performing several actions within the block without losing the lock, or using it for wait/notify. So it's not likeAtomicBoolean
is a general alternative to synchronization - but in this case you can use it instead of synchronization.There are a few subtle differences but seen from the outside the two code snippets behave similarly: if you call the
set
method, the change will be visible to other threads callingget
subsequently.The main differences are:
synchronized
orAtomicBoolean
synchronized
block will allow you to add instructions atomically butAtomicBoolean
won't