Java HashTable HashMap ConcurrentHashMap 对比选择

来源:互联网 发布:虎牙象棋勇哥是软件 编辑:程序博客网 时间:2024/05/21 05:17

1.总结

这个面试中问到太多了,先来个结论
单线程用HashMap
多线程用ConcurrentHashMap,Java5+
HashTable基本是历史遗留问题了
除了HashMap不是外,HashTable和ConcurrentHashMap都是线程安全的

2.区别

HashTable是几乎每个方法都加了synchronized同步类,所以保障了线程安全,但是这个粒度过大,导致性能的下降
HashMap没有加锁,所以不安全,但是允许null值的存在(但这是有歧义的)

为什么ConcurrentHashMap不允许空值,这是设计者奇怪的设定

ConcurrentHashMap是Java5中新增的并发类,通过减少锁的粒度,提高并发度++
详细如下
对比图片

3.参考

stack overflow的回答
分析ConcurrentHashMap
Hashtable与ConcurrentHashMap区别

0 0