2011-05-01 47 views
0


爲了synchrozie我的地圖get方法我用synchrozie從地圖獲取方法?

myObj = myMap.get("aaa"); 

if (myobj==null) 
    synchronize (someObject){ 
     myObj = mymap.get("aaa"); 
     if (myobj==null){ 
      myObj = createNew(); 
      myMap.put(myObj); 

    } 
} 
return myObj; 

是該besdt方式。要求兩次空條件?

回答

2

同步get只是不是很有用。 get不會更改地圖的狀態。您還必須同步put(使用同一個對象監視器)。您還可以使用Collections.synchronizedMap(..)ConcurrentHashMap

更新:爲get & then put可以使用ConcurrentHashMap.putIfAbsent(..)

+0

對不起,我忘了寫它。剛剛添加了地圖放線。非常感謝。 – Jeb 2011-05-01 08:00:32