2012-06-07 25 views
-2

我有一個HashMap基本上試圖存儲基於對象的名稱的對象作爲關鍵。但是,第一次當對象不在HashMap而不是重新調整我null它返回object。因此,它永遠不會去創建一個新的對象,並永遠不會把它放在HashMap - 我希望它返回null當使用Hashmaps,並訪問基於密鑰的值

這是我的代碼...

private static Map<String, SObj> MComponentCache = Collections.synchronizedMap(new HashMap<String, Sobj>()); 

    static SObj getSObj(String cName) { 
     SObj cmp = null; 
     String pKey = "Component:" + cName.intern(); 
     cmp = MComponentCache.get(cName); 
     synchronized (pKey){ 
      if (cmp == null){ 
       cmp = new SObj(cName); 
       MComponentCache.put(cName, cmp); 
      } 
     } 
     return cmp; 
    } 

任何人都可以請幫我糾正。

+1

它回報你什麼?我不明白'HashMap'如果不包含密鑰,它不會返回'null';實際上並不是'HashMap'的工作原理。 –

+1

真的,它返回一個你沒有放在那裏的對象?什麼對象? –

+3

在'pKey'上同步不會做你認爲它做的事,因爲它沒有被執行。 'cName' * *是實習的,但那不是您同步的對象。 – dasblinkenlight

回答

0

您的代碼不正確。在密鑰上同步是毫無意義的,因爲它是一個新構建的本地對象,並且同步映射在操作之間不是原子。您需要在包含get()put()操作的塊中同步地圖。