簡體   English   中英

同步塊中的 HashMap 與 Collections.synchronizedMap() 有什么區別。

[英]What is difference between HashMap in synchronized block vs Collections.synchronizedMap().

同步塊中的 HashMap 與 Collections.synchronizedMap() 有什么區別。

HashMap<String,String> hm = new HashMap<String,String>();
hm.put("key1","value1");
hm.put("key2","value2");
synchronized(hm)
{
   // Thread safe operation
}

Map<String, String> synchronizedMap = Collections.synchronizedMap(hm);
// Use synchronizedMap for Thread safe concurrent operation 

這兩個哪個更好?

使用 synchronizedMap 方法更方便、更安全,因為您知道對映射的所有訪問都將受到保護(只要您不通過直接調用 hm 上的方法繞過它)。

但是使用 synchronized 塊使您能夠通過將鎖保持在多個語句上來控制鎖定的粒度,這是 synchronizedMap 選項所不允許的。

因此,如果您需要在不與來自其他線程的調用交錯的情況下執行多個語句,則必須選擇同步塊(或者,如果您正在尋找類似 putIfAbsent 或類似功能的內容,則切換到類似 ConcurrentHashMap 的內容)。 如果你不需要,synchronizedMap 更容易。

他們是一樣的。 synchronizedMap()比自己處理同步要容易得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM