线程安全方面
1.HashMap是线程不安全的。
2.HashTable和ConcurrentHashMap是线程安全的。
HashTable使用的是一把大锁来保证线程安全,锁的冲突概率很高,如下图所示
ConcurrentHashMap给每个元素都配了一把锁,是锁的冲突概率大大降低
3.HashMap的key允许为空,其它两个则不允许。
ConcurrentHashMap的其它优化
此外,ConcurrentHashMap还有其它优化
1.ConcurrentHashMap读不加锁,写才加锁。
2.ConcurrentHashMap充分利用了CAS的特性。
3.ConcurrentHashMap对扩容进行了优化,采用了化整为零的扩容操作(每次只扩容一点点,逐渐完成整个扩容)。