ConcurrentHashMap and Hashtable in Java
本问题已经有最佳答案,请猛点这里访问。
Java中的并发流映射和哈希表之间的区别是什么?
哪一个对于线程应用程序更有效?
ConcurrentHashMap and Hashtable locking mechanism
HashTable 属于收集框架;ConcurrentHashMap 属于执行框架。HashTable 对整个数据使用单锁。ConcurrentHashMap 在段级(默认为16)上使用多个锁,而不是对象级,即整个Map 。ConcurrentHashMap 锁定仅适用于更新。对于检索,它允许完全并发,检索反映最近完成的更新操作的结果。因此,当使用锁完成写操作时,读取速度会非常快。- 如果一个线程试图修改它,而另一个线程正在迭代它,并且不允许空值,那么
ConcurrentHashMap 不会抛出ConcurrentModificationException 。 ConcurrentHashMap 返回Iterator ,在并发修改时,Iterator 会安全失效(即迭代器会复制内部数据结构)。ConcurrentHashMap 使用数据库shards逻辑(Segment 称为并发级别,即将数据划分为shards(段),然后对每个shard(段)加锁,而不是对整个数据加锁([] segments Map )。默认值为16。
要更准确地理解Concurrenthashmap,请查看此链接
下面的类比只帮助您理解概念(而不是逻辑)
- 假设
HashTable 和ConcurrentHashMap 是两种类型的房屋。 HashTable 锁住了家的大门。ConcurrentHashMap 锁定特定房间门,而不是主门。
Which is more efficient for threaded applications?
当使用