我在一次采访中被要求提出一个Singleton模式的设计/实现,我必须懒惰地加载类并且不使用同步关键字。我被呛了,不能拿出任何东西。然后我开始阅读java并发和concurrentHaspMap。请检查下面的imlpementation,并确认您是否发现Double check Locking或此实现的任何其他问题。不使用同步关键字的单例实现的懒惰初始化
package Singleton;
import java.util.concurrent.ConcurrentHashMap;
public final class SingletonMap {
static String key = "SingletonMap";
static ConcurrentHashMap<String, SingletonMap> singletonMap = new ConcurrentHashMap<String, SingletonMap>();
//private constructor
private SingletonMap(){
}
static SingletonMap getInstance(){
SingletonMap map = singletonMap.get(key);
if (map == null){
//SingletonMap newValue= new SingletonMap();
map = singletonMap.putIfAbsent(key,new SingletonMap());
if(map == null){
map = singletonMap.get(key);
}
}
return map;
}
}
我认为他们想听到关于原子性的东西。 – gkuzmin 2012-08-09 07:54:02
这个实现是不必要的复杂。有更简单的方法来创建一个单身 - 请参阅下面Peter和我发布的答案。 – munyengm 2012-08-09 08:35:48