有更好的方法來緩存一些只能創建一次的非常大的對象,因此需要緩存嗎?目前,我有以下幾點:關於使用基於Enum的Singleton來緩存大對象(Java)
public enum LargeObjectCache {
INSTANCE;
private Map<String, LargeObject> map = new HashMap<...>();
public LargeObject get(String s) {
if (!map.containsKey(s)) {
map.put(s, new LargeObject(s));
}
return map.get(s);
}
}
有幾類,可以使用LargeObjects,這就是爲什麼我決定使用一個單獨的緩存,而不是傳遞LargeObjects到使用它的每一個類。
此外,地圖不包含許多密鑰(一個或兩個,但密鑰可以在程序的不同運行中有所不同),那麼,在這種情況下是否有另一個更高效的地圖?
你是對的,謝謝。然而,在javadoc中,它提到了線程安全性:「這通常是通過同步某個自然封裝地圖的對象來完成的,如果不存在這樣的對象,則應該使用Collections.synchronizedMap方法「。 那麼,使用synchronized(map)和使用Collections.synchronizedMap(map),甚至使用ConcurrentHashMap之間有什麼區別呢?他們似乎都有相同的目標,但我想一定有差異。 –
2009-07-19 12:09:22