是否可以在多线程应用程序中使用HashMap <T>?

yas*_*eco 10 java multithreading

假设我们有多个线程,我们在线程之间划分可能的keySet(即key % thread_i),因此没有密钥冲突.

我们可以安全地使用HashMap<T>而不是ConcurrentHashMap<T>吗?

ysh*_*vit 8

不,有几个原因.一些(但不是全部)将是:

  1. HashMap重新散列您的哈希值,因此您甚至不知道实际的键哈希是什么.
  2. 你必须查看HashMap的实现,甚至知道有多少桶.
  3. 调整大小必须从旧数组中复制状态,并且不能跨线程安全地发布.
  4. 其他状态(如地图的当前大小)将无法安全更新.

如果你在考虑一个特定的JVM实现构建你的地图,并确保您的地图永远不会调整大小,并且知道你不会在乎这些额外的状态,它也许有可能,在严格意义的.但是出于任何实际目的,没有.