【问题标题】:Can I use the same instance in multiple threads running in parallel? [duplicate]我可以在并行运行的多个线程中使用相同的实例吗? [复制]
【发布时间】:2016-08-24 18:31:48
【问题描述】:

如果我有多个线程并行运行并且每个线程使用相同的HashMap 实例,这是否正常/安全? HashMap 对象将仅用于读取数据。在任何线程中都不会向HashMap 写入数据。

需要明确的是,HashMap 实例是基类的成员,我将在其子类中调用后台线程。然后这些线程将引用HashMap 对象。

【问题讨论】:

  • 如果您只是读取同一个字段,您可以安全地使用它 - 但请注意多个线程可能同时读取相同的值。
  • @mastov 谢谢!没有找到这个答案。

标签: java multithreading


【解决方案1】:

如果线程只读取HashMap,那么没问题。当至少一个线程正在修改HashMap 而其他线程可能同时读取它时,您将遇到麻烦。

Java 确实有其他 Map 实现可以安全地并发使用,例如 java.util.concurrent.ConcurrentHashMap

【讨论】:

  • 也许添加来自docs.oracle.com/javase/8/docs/api/java/util/HashMap.html的“此实现不同步”引用?
  • @AndyTurner 当线程只读取而不写入 HashMap 时,这并不重要。
  • 嗯,有点像。它说在结构上修改映射并从多个线程读取它时需要同步。虽然这并没有明确说明仅阅读时不需要同步,但我认为这是由缺席暗示的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 2015-05-19
  • 2016-02-17
  • 1970-01-01
相关资源
最近更新 更多