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