1.多线程下进行put操作的时候导致的数据不一致。
当有多个线程进行put操作时,第一个线程已经计算好需要存放的值的桶索引坐标,此时轮到第二个线程,第二个线程成功地把记录插入到桶里面,然而两个线程计算出来的桶索引可能是一样的,然后第一个线程就会继续往原先的桶索引插值,这就覆盖了第二个线程的记录。
2.可能因为扩容而引起死循环。
在扩容的时候,JDK1.8之前是采用头插法,当两个线程同时检测到hashmap需要扩容,在进行同时扩容的时候有可能会造成链表的死循环,因为采用头插法,新链表与旧链表的顺序是反的。在JDK1.8之后采用尾插法就不会出现这种问题。