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
时并不真正相关。嗯,这有点像。它说,当从结构上修改映射并从多个线程读取它时,有必要进行同步。虽然这并没有明确说明只有阅读时不需要同步,但我认为这是因为没有同步。