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