Java 我可以在并行运行的多个线程中使用同一实例吗?

Java 我可以在并行运行的多个线程中使用同一实例吗?,java,multithreading,Java,Multithreading,如果我有多个线程并行运行,并且每个线程使用相同的HashMap实例,那么这样做是否安全?HashMap对象将仅用于读取数据。在任何线程中都不会向HashMap写入数据 需要说明的是,HashMap实例是基类的成员,我将在其子类中调用后台线程。然后,这些线程将引用HashMap对象。如果线程仅从HashMap读取,则没有问题。当至少有一个线程正在修改HashMap而其他线程可能同时从中读取时,您将遇到麻烦 Java确实有其他可安全并发使用的Map实现,例如Java.util.concurrent.

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


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

如果线程仅从
HashMap
读取,则没有问题。当至少有一个线程正在修改
HashMap
而其他线程可能同时从中读取时,您将遇到麻烦


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

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


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

如果您仅从同一字段读取数据,则可以安全地使用它-但请注意,多个线程可能同时读取相同的值。@mastov谢谢!找不到这个答案。如果您只从同一个字段读取,您可以安全地使用它-但是请注意,多个线程可能同时读取相同的值。@mastov谢谢!找不到此答案。也许可以添加?@AndyTurner中的“此实现未同步”引号,当线程只读取而不写入
HashMap
时,该引号实际上并不相关。嗯,有点像。它说,当从结构上修改映射并从多个线程读取它时,有必要进行同步。虽然这并没有明确说明仅读取时不需要同步,但我认为这是由于缺少同步。也许可以添加?@AndyTurner中的“此实现未同步”引号,这在线程仅读取而不写入
HashMap
时并不真正相关。嗯,这有点像。它说,当从结构上修改映射并从多个线程读取它时,有必要进行同步。虽然这并没有明确说明只有阅读时不需要同步,但我认为这是因为没有同步。