ConcurrentHashMap vs Synchronized HashMap

2022-08-31 06:55:47

在 和 上使用包装类 、 、 有什么区别?SynchronizedMapHashMapConcurrentHashMap

它是否只是能够在迭代时修改它()?HashMapConcurrentHashMap


答案 1

同步:HashMap

  1. 每个方法都使用对象级锁进行同步。因此,synchMap 上的 get 和 put 方法获取一个锁。

  2. 锁定整个集合是一种性能开销。当一个线程固定在锁上时,其他任何线程都不能使用该集合。

ConcurrentHashMap在 JDK 5 中引入。

  1. 在对象级别没有锁定,锁定的粒度要精细得多。对于 ,锁可能位于哈希映射桶级别ConcurrentHashMap

  2. 较低级别锁定的效果是,您可以拥有并发读取器和写入器,这对于同步集合是不可能的。这带来了更大的可扩展性。

  3. ConcurrentHashMap如果一个线程尝试修改它,而另一个线程正在迭代它,则不会抛出它。ConcurrentModificationException

这篇文章 Java 7: HashMap vs ConcurrentHashMap 是一本非常好的书。强烈推荐。


答案 2

简短的回答:

这两个映射都是接口的线程安全实现。 在需要高并发的情况下实现更高的吞吐量。MapConcurrentHashMap

Brian Goetz关于背后的想法的文章非常好读。强烈推荐。ConcurrentHashMap


推荐