簡體   English   中英

同步與鎖定與同步 map

[英]synchronized vs lock vs synchronized map


我需要同步我對 hashmap 的訪問。 這是我的選擇

  1. 我知道我可以使用 Synchronize 關鍵字。 這是一種選擇。 我可以使用 map 本身嗎?
  2. 目前我有一個 get 方法,如果 object 不存在,則創建它並將其放入 map。 我可以同步方法。
  3. 我可以使用同步塊
  4. 我可以用
    Map m = Collections.synchronizedMap(new HashMap(...)); 在我的代碼中。

我傾向於做4,因為這聽起來最簡單。 有什么建議么?

我建議您不要使方法同步,並且不要鎖定 map 本身。 我通常更喜歡使用單獨的鎖定 object,它用於鎖定,並且在擁有 map 的 class 中知道。

您可能使用synchronizedMap ,但這取決於您想用它做什么。 如果您只獲取和放置值,那很好。 如果您需要迭代map,則需要在迭代時阻止其他線程修改 map。

另一種選擇是使用ConcurrentHashMap 有關語義,請參閱文檔。 如果它的行為方式符合您的需要,這可能是最簡單的方法。

您可以使用 ConcurrentHashMap.putIfAbsent() 它可以在不同步的情況下執行您想要的操作。

暫無
暫無

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

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