SynchronizedMap在 aHashMap和上使用包装类 , 有什么区别ConcurrentHashMap?
SynchronizedMap
HashMap
ConcurrentHashMap
它只是能够HashMap在迭代它时修改(ConcurrentHashMap)?
同步HashMap
每个方法都使用 object level lock. 所以 synchMap 上的 get 和 put 方法获取了一个锁。
object level lock
锁定整个集合是一种性能开销。当一个线程持有锁时,没有其他线程可以使用该集合。
ConcurrentHashMap在 JDK 5 中引入。
在对象级别没有锁定,锁定的粒度要细得多。对于 a ConcurrentHashMap,锁可能在 a hashmap bucket level 。
hashmap bucket level
较低级别锁定的效果是您可以拥有并发的读取器和写入器,这对于同步集合是不可能的。这导致更多的可扩展性。
ConcurrentHashMap``ConcurrentModificationException如果一个线程尝试修改它,而另一个线程正在对其进行迭代,则不会抛出 a 。
ConcurrentHashMap``ConcurrentModificationException
这篇文章Java 7: HashMap vs ConcurrentHashMap 是一本很好的读物。强烈推荐。