我在一次採訪中被要求提出一個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