Java 中的 ConcurrentHashMap 和 Hashtable 有什么区别?
哪个对于线程应用程序更有效?
ConcurrentHashMap 和 Hashtable 锁定机制
-
Hashtable
属于Collection框架;ConcurrentHashMap
属于Executor框架。
-
Hashtable
uses 单锁对于整个数据。ConcurrentHashMap
uses 多把锁在段级别(默认为 16)而不是对象级别,即整体Map
.
-
ConcurrentHashMap
锁定仅适用于更新。在检索的情况下,它允许完全并发,检索反映最近完成的更新操作的结果。因此,读取可以非常快地进行,而写入则通过锁完成。
-
ConcurrentHashMap
不抛出ConcurrentModificationException
如果一个线程尝试修改它,而另一个线程正在迭代它并且不允许空值。
-
ConcurrentHashMap
回报Iterator
,它在并发修改时是故障安全的(即迭代器将复制内部数据结构)。
-
ConcurrentHashMap
使用数据库分片逻辑(Segment<K, V>[] segments
) 被称为并发级别,即将数据划分为分片(段),然后在每个分片(段)上加锁,而不是为整个数据加一个锁(Map
)。默认值为 16。
要从技术上更深入地了解 ConcurrentHashMap,请查看此内容link http://howtodoinjava.com/2013/05/27/best-practices-for-using-concurrenthashmap/
以下类比仅帮助您理解概念(而不是逻辑)
- Assume
Hashtable
and ConcurrentHashMap
有两种类型的房屋。
-
Hashtable
锁上家的大门。
-
ConcurrentHashMap
锁定特定房间的门而不是主门。
哪个对于线程应用程序更有效?
ConcurrentHashMap
对于线程应用程序来说更有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)