|
melin 写道
public class ConcurrentSingleton {
private static final ConcurrentMap<String, ConcurrentSingleton> map = new ConcurrentHashMap<String, ConcurrentSingleton>();
private static ConcurrentSingleton instance;
public static ConcurrentSingleton getInstance() {
if (instance == null) {
instance = map.putIfAbsent("INSTANCE", new ConcurrentSingleton());
}
return instance;
}
}
public class AtomicBooleanSingleton {
private static AtomicBoolean initialized = new AtomicBoolean(false);
private static AtomicBooleanSingleton instance;
public static AtomicBooleanSingleton getInstantce() {
checkInitialized();
return instance;
}
private static void checkInitialized() {
if(instance == null && initialized.compareAndSet(false, true)) {
instance = new AtomicBooleanSingleton();
}
}
}
public class ConcurrentSingleton {
private static final ConcurrentMap<String, ConcurrentSingleton> map = new ConcurrentHashMap<String, ConcurrentSingleton>();
private static ConcurrentSingleton instance;
public static ConcurrentSingleton getInstance() {
if (instance == null) {
instance = map.putIfAbsent("INSTANCE", new ConcurrentSingleton());
}
return instance;
}
}
public class AtomicBooleanSingleton {
private static AtomicBoolean initialized = new AtomicBoolean(false);
private static AtomicBooleanSingleton instance;
public static AtomicBooleanSingleton getInstantce() {
checkInitialized();
return instance;
}
private static void checkInitialized() {
if(instance == null && initialized.compareAndSet(false, true)) {
instance = new AtomicBooleanSingleton();
}
}
}
Keep simple,
这样地性能更不好,还不如直接AtomicX类来做,不过还是用地volatile做的!并且还有问题, private static AtomicBooleanSingleton instance; 这里建议加一个volatile修饰一下!多个线程在观察这个变量地时候,没有volatile结果可能null和非null。
|
|