Given following code, in which I check a boolean value isInitialised before running some code. if instead of
private static volatile boolean isInitialised;, I use
private static final AtomicBoolean isInitialised = new AtomicBoolean(false);,
it should achieve the same outcome and even the performance difference is negligible?
public class DclSingleton {
private static volatile boolean isInitialised;
//private static final AtomicBoolean isInitialised = new AtomicBoolean(false);
public static void doInit() {
if (!isInitialised) {
synchronized (DclSingleton.class) {
if (!isInitialised) {
// do init
isInitialised = true;
}
}
}
}
}
And if I do use AtomicBoolean, would following code achieve the same?
public class DclSingleton {
// private static volatile boolean isInitialised;
private static final AtomicBoolean isInitialised = new AtomicBoolean(false);
public static void doInit() {
if (isInitialised.compareAndSet(false, true)) {
// do init
}
}
}