面试真题

Java · 中等 · 阿里巴巴

HashMap 源码分析,是不是线程安全?

中等 Java 🎤 阿里巴巴
参考答案
结论:HashMap线程不安全,禁止在多线程并发写场景下直接使用。原理:JDK1.8源码中putVal()无同步控制,多线程同时put时可能出现:1) 同桶位节点覆盖导致数据丢失;2) 扩容期间线程A转移链表,线程B同时操作导致节点丢失或形成环(1.7头插法死循环,1.8尾插法仍可能丢数据);modCount仅用于迭代快速失败。线程安全替代:Hashtable方法加synchronized锁全表性能差;Collections.synchronizedMap包装器同步方法;ConcurrentHashMap(1.8 CAS+ synchronized锁桶头)高并发推荐。
题目整理自公开面经,答案由校招宝自研生成,仅供参考