1.總結
這個面試中問到太多了,先來個結論
單線程用HashMap
多線程用ConcurrentHashMap,Java5+
HashTable基本是歷史遺留問題了
除了HashMap不是外,HashTable和ConcurrentHashMap都是線程安全的
2.區別
HashTable是幾乎每個方法都加了synchronized同步類,所以保障了線程安全,但是這個粒度過大,導致性能的下降
HashMap沒有加鎖,所以不安全,但是允許null值的存在(但這是有歧義的)
爲什麼ConcurrentHashMap不允許空值,這是設計者奇怪的設定
ConcurrentHashMap是Java5中新增的併發類,通過減少鎖的粒度,提高併發度++
詳細如下
3.參考
stack overflow的回答
分析ConcurrentHashMap
Hashtable與ConcurrentHashMap區別