gpt4 book ai didi

java - 同步 vs 锁 vs 同步映射

转载 作者:行者123 更新时间:2023-11-29 06:45:21 24 4
gpt4 key购买 nike


我需要同步我对 HashMap 的访问。这是我的选择

  1. 我知道我可以使用 Synchronize 关键字。这是一种选择。我可以使用 map 本身吗?
  2. 目前我有一个 get 方法,如果对象不存在,则创建它并将其放入 map 中。我可以同步方法。
  3. 我可以使用同步块(synchronized block)
  4. 我可以用
    Map m = Collections.synchronizedMap(new HashMap(...));在我的代码中。

我倾向于做 4,因为这听起来最简单。有什么建议么?

最佳答案

我建议您不要使方法同步,并且不要锁定 map 本身。我通常更喜欢使用单独的锁定对象,该对象用于锁定并且在拥有 map 的类中已知。

您可以可能使用synchronizedMap,但这取决于您想用它做什么。如果您只获取和输入值,那很好。如果您需要在 map 上迭代,您需要在迭代时阻止其他线程修改 map 。

另一种选择是使用 ConcurrentHashMap .有关语义,请参阅文档。如果它按照您需要的方式运行,这可能是最简单的方法。

关于java - 同步 vs 锁 vs 同步映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5847106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com