繁体   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