HashMap为何线程不安全?

1.put的时候致使的多线程数据不一致。
当有多个线程进行put操做时,第一个线程已经计算完放值的桶索引坐标,此时轮到第二个线程,第二个线程成功地把记录插入到桶里面,然而两个线程计算出来的桶索引是同样的,而后第一个线程就会继续往原先的桶索引插值,就覆盖了第二个线程的记录。多线程


2.可能由于resize而引发死循环。线程

resize的时候链表会反转,原先1->2->3,resize以后3->2->1.假设有A,B两个线程, 线程A执行到了transfer方法的Entry next = e.next这一句 ,此时状态是1->2,而后轮到线程B,线程B顺利完成resize操做,此时3->2->1。而后又到A线程,由于链表已经被线程B变成3->2->1,因此线程A会进入1->2->1的环形链表,从而死循环。blog

相关文章
相关标签/搜索