面试真题

Java · 困难 · 阿里巴巴

ConcurrentHashMap 源码分析

困难 Java 🎤 阿里巴巴
参考答案
结论:JDK1.8 ConcurrentHashMap采用数组+链表+红黑树,以CAS+synchronized实现线程安全,取代1.7分段锁。要点:1.结构:table数组,冲突链表转红黑树(阈值8/64)。2.put流程:spread计算hash;若table空先initTable;若桶空CAS放节点;否则synchronized锁桶头节点,链表尾插或树节点插入;size超阈值transfer扩容。3.get流程:无锁遍历,volatile保证可见。4.计数:baseCount+CounterCell分散计数,sumCount求近似size。5.对比1.7:1.7用Segment分段锁,默认16段,并发度固定;1.8锁粒度细化到桶,性能更高。源码关键方法:putVal、helpTransfer、treeifyBin。
题目整理自公开面经,答案由校招宝自研生成,仅供参考