【发布时间】:2012-08-06 09:55:30
【问题描述】:
我在一次采访中被要求提出一个单例模式的设计/实现,我必须延迟加载类并且不使用同步关键字。我被噎住了,什么都想不出来。然后我开始阅读 java 并发和 concurrentHaspMap。请检查下面的实施,如果您发现任何与双重检查锁定有关的问题或与此实施有关的任何其他问题,请确认。
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;
}
}
【问题讨论】:
-
我认为他们想听听一些关于原子性的事情。
-
这个实现是不必要的复杂。有更简单的方法来创建单例 - 请参阅下面 Peter 和我发布的答案。
标签: java concurrency singleton synchronized