jdk1.7擴容時,不管是否有鏈表,併發均可能出現循環鏈表

擴容時使用transfer
transfer不一樣於put時的判斷hash衝突,直接使用頭插法,若是沒有衝突,則next爲null。
以下:
e.next = newTable[i];
newTable[i] = e;
若是線程B設置了newTable[i] = e,線程A執行e.next = newTable[i];
則會形成e.next = e;不管是否有鏈表,都會形成死循環。線程

相關文章
相關標籤/搜索