在这种情况下,我是否需要在Java中使用并发HashMap:
在将HashMap传递给一堆线程之前,我使用所有必要的键启动map:
Key = "thread1Key", Value = null
Key = "thread2Key", Value = null
Key = "thread3Key", Value = null
...
每个任务都是Runnable(由线程执行)的一部分,并且被分配为仅更改其中1个键的值。它是预先分配的。换句话说,我不需要担心多个Runnable可能会更改hashmap中相同键的情况。
在这种情况下,是需要并发HashMap还是需要常规HashMap?为什么?
谢谢!
HashMap
的这种用法是安全的,无需额外的同步。该文档准确描述了您的用例:
如果多个线程并发访问哈希映射,并且其中至少有一个线程在结构上修改了映射,则必须在外部同步。(结构修改是任何添加或删除一个或多个映射的操作;仅仅更改与实例已经包含的键关联的值不是结构修改。)
在这种情况下,HashMap
可能在结构上保持一致,但也存在其值可见性的问题。如果一个值在一个线程中更改,那么它不能保证被其他线程看到。或者如果是,那么它也可能不一致,因为它在线程之间没有安全发布。
如果地图中没有删除条目,则常规地图就足够了。