作者|依本多情
當線程一剛剛擴容好數組,此時剛要準備進行rehash,但是此時線程二強行插入進來執行,并且線程二已經rehash完成之後的狀态圖(上半部分表示的線程一,下半部分表示的是線程二)
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCM581dvRWYoNHLwEzX5xCMx8FesU2cfdGLwATMfRHLGZkRGZkRfJ3bs92YskmNhVTYykVNQJVMRhXVEF1X0hXZ0xiNx8VZ6l2cssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2UzM2I2N1kjM1ETMjZDOxYzX1IzM1EDM3AzLcFTMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL3M3Lc9CX6MHc0RHaiojIsJye.png)
此時線程一已經被喚醒了,要開始進行操作rehash操作,把key為5的節點還是挂在數組下标為1的位置上,并且key為5的後面是9這個節點(這裡其實吧之前的數組擴容為4個了,然後肯定需要重新定位下标啊,是以這裡是對4進行取餘,然後對應查到對應的數組下标下的連結清單中)
從第一個狀态開始繼續接着處理key為9的節點,是以應該是都挂在桶數組下标為1的連結清單上順序為9---->5---->NULL
此時在第三步時候處理9完畢之後,他發現節點9後面還有一個節點5(這個節點5是因為線程二中已經rehash完畢之後留下的),此時他又會把節點5放線上程一中的首部此時也就是5---->9----5(後面這部分的9–>5是保留的第三個狀态留下的),到這裡就形成了死循環。