ConcurrentHashMap
ConcurrentHashMap继承自HashMap并实现了Map接口
HashMap是线程不安全的:在多线程环境下,如果两个线程同时插入相同的key的key-Value键值对,可能就会产生数据重复插入问题。
HashTable是线程安全版本,可以解决上述问题。但是由于HashTable是在方法上都加了Synchronized关键字,在线程插入的时候都要争抢锁,所以就会导致资源的浪费,性能低。
ConcurrentHashMap中引入的分段锁机制,unSafe原子类,同时引入cas操作,lock和unlock
1. 先根据key,算出对应的Segment数组下标,index
2. 获取index位置上的锁,Segment[index].lock();
3. segments[index].put[key.value],--entry--数组,链表
4. 释放index位置上的锁,Segment[index].unlock();