【问题标题】:Should I use ConcurrentHashMap or Hashmap or SynchronizedMap?我应该使用 ConcurrentHashMap 还是 Hashmap 还是 SynchronizedMap?
【发布时间】:2017-05-22 05:26:27
【问题描述】:

我在我的多线程代码之外创建了一个哈希图。以后这个 hasmap 不会有任何变化。

在此之后,我将启动两个线程,这两个线程都将从这个 hashmap 中读取(是的,只有读取操作)。如果 thread1 正在从我的 hashmap 对象中读取,线程 2 是否也可以同时读取?还是我需要 Concurrenthashmap 或任何其他版本的 Map?

【问题讨论】:

  • 不,您不需要ConcurrentHashMap,您真正应该传递给消费者的是ImmutableMapUnmodifiableMap
  • 由于您将只进行读取操作,因此不需要同步版本的地图。

标签: java multithreading concurrency


【解决方案1】:

如果线程 1 正在读取我的 hashmap 对象,线程 2 是否也可以读取 同时?

如果您确定没有写入操作,则根本不需要使用同步选项,请使用普通版本的 Map。

你也可以使用Immutable Map

一个内容永远不会改变的地图,还有许多其他重要的 ImmutableCollection 中详述的属性

【讨论】:

  • 嗨,我已将我的地图声明为最终地图,以便我可以在我的 Callable 匿名内部类中使用它。这应该没问题,对吧?还是您认为使用 ImmutableCollection 更好?
【解决方案2】:

不,您不需要并发哈希映射..但只是因为您不进行任何修改。您可以毫无问题地阅读相同内容。

【讨论】:

    【解决方案3】:

    如果您只需要读取操作,则无需使用同步。如果您在创建后不进行任何写入,请使其不可变,因此任何主体都无法更改它。无需同步。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      • 2018-09-05
      • 2015-10-16
      • 2023-03-06
      • 2013-02-20
      • 2011-07-31
      • 2010-12-23
      相关资源
      最近更新 更多