试题:实现一个线程安全的HashMap,最简单是加synchronized变成HashTable,但面试官大概率不满意,原因是什么,还有哪些方案?
校校建议
HashTable是方法级别全量加锁,锁粒度大,并发性能差。
其他方案:
1、Collections.synchronizedMap,也是对象锁,性能依旧一般;
2、参考ConcurrentHashMap,分段锁/CAS+synchronized锁桶节点,降低锁粒度,提升并发读写性能。
面试重点讲锁粒度的取舍。