【发布时间】:2021-11-02 06:21:42
【问题描述】:
给定以下代码,我在其中检查布尔值isInitialised,然后再运行一些代码。如果不是private static volatile boolean isInitialised;,我使用private static final AtomicBoolean isInitialised = new AtomicBoolean(false);,
它应该达到相同的结果,甚至性能差异可以忽略不计?
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;
}
}
}
}
}
如果我使用AtomicBoolean,下面的代码会达到同样的效果吗?
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
}
}
}
【问题讨论】:
标签: java concurrency