Java 中的 ConcurrentHashMap 和 Hashtable 有什么区别?
哪个对线程应用程序更有效?
最佳答案
ConcurrentHashMap and Hashtable locking mechanism
-
Hashtable
属于Collection框架;ConcurrentHashMap
属于 Executor 框架。 -
Hashtable
对整个数据使用单锁。ConcurrentHashMap
在段级别使用多重锁(默认为 16)而不是对象级别,即整个Map
. -
ConcurrentHashMap
锁定仅适用于更新。在检索的情况下,它允许完全并发,检索反射(reflect)最近完成的更新操作的结果。因此,在使用锁完成写入时,读取可能会非常快。 -
ConcurrentHashMap
不抛出ConcurrentModificationException
如果一个线程尝试修改它,而另一个线程正在对其进行迭代并且不允许空值。 -
ConcurrentHashMap
返回Iterator
,它在并发修改时是故障安全的(即迭代器将复制内部数据结构)。 -
ConcurrentHashMap
使用数据库分片逻辑(Segment<K, V>[] segments
)被称为并发级别,即将数据划分为分片(段),然后在每个分片(段)上加锁,而不是为整个分片加一个锁数据(Map
)。默认值为 16。
要从技术上更深入地了解 ConcurrentHashMap,请查看 link
以下类比仅帮助您理解概念(而非逻辑)
- 假设
Hashtable
和ConcurrentHashMap
是两种类型的住宅。 -
Hashtable
锁住家的大门。 -
ConcurrentHashMap
锁定特定房间的门而不是大门。
Which is more efficient for threaded applications?
ConcurrentHashMap
对于线程应用程序更有效。
关于java - Java中的ConcurrentHashMap和Hashtable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12646404/