Java底层类和源码分析系列-ConcurrentHashMap源码分析
要点 ConcurrentHashMap是HashMap的线程安全版本; 不允许[key,value]为null; 比Hashtable锁粒度更细; 采用CAS和synchronized来保证并发安全。数据结构跟HashMap1.8的结构一样,数组+链表/红黑二叉树; 负载因子0.75; 默认初始化容量16; put时当前bucket为空时,使用CAS操作,将Node放入对应的bucket中; put时出现hash冲突,则采用synchronized; 查询操作不加锁,因此ConcurrentHashMap不是强一致性; ConcurrentHashMap内部采用的锁有synchronized、CAS、自旋锁、分段锁、volatile; 定义 public class ConcurrentHashMap<K,V> extends AbstractMap<K,V> implements ConcurrentMap<K,V>, Serializable 其中接口ConcurrentMap<K, V>来自Map<K, V>,添加了一些函数式接口方法,比如: default void forEach(BiConsumer<? super K, ? super V> action) default void replaceAll(BiFunction<? super K, ?