目录
1.线程安全问题考虑:
HashMap线程不安全
HashMap,ConcurrentHashMap线程安全
但是不推荐使用HashTable,因为Hashtable是使用一把大锁,把所有代码给锁起来,
这样所冲突的概率很大,相当于你两个线程在哈希表上的不同哈希桶上的元素修改也会造成阻塞
而ConcurrentHashMap改善了这个缺点
2.ConcurrentHashMap的优点
1.把锁的粒度细化了,每个哈希桶有有一把锁,这样在修改不同哈希桶上不会发生问题。
2.读没加锁,写才加锁
3.更充分的使用CAS特性 ---》在维护size的时候,对size++,size--这些操作使用了CAS,也就是这些操作都是原子型的
4.针对扩容场景进行了优化,正常是一口气完成,但是它是化整为零的方法
一口气完成:在某次put的时候,有put来完成整个扩容。不好,这样这次put会很慢
化整为零:重新哈希的时候 每次基本操作都扩容一点点。搬运过程中,新的旧的哈希表一起存在,查询的时候新表旧表一起查; 新增操作直接往新表上新增