参考链接:
1. HashMap为什么是线程不安全的?
HashMap底层是一个Entry数组。如果两个Key的Hash值相同,则会产生碰撞冲突。
HashMap扩容时会生成一个新的数组。
2. ConcurrentHashMap
ConcurrentHashMap允许多个修改操作并发进行,其关键在于使用了锁分离技术。它使用了多个锁来控制对Hash表的不同部分进行的修改。ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的HashTable, 它们有自己的锁。只要多个修改操作发生在不同的段上,它们就可以并发进行。
ConcurrentHashMap是线程安全的类,并不能保证使用了ConcurrentHashMap的操作都是安全的。
ConcurrentHashMap的get不需要加锁,put操作需要加锁。