1. 程式人生 > >HashMap 在併發時可能出現的問題

HashMap 在併發時可能出現的問題

開發十年,就只剩下這套架構體系了! >>>   

    如果多個執行緒同時使用 put 方法新增元素,而且假設正好存在兩個 put 的 key 發生了碰撞(根據 hash 值計算的 bucket 一樣),那麼根據 HashMap 的實現,這兩個 key 會新增到陣列的同一個位置,這樣最終就會發生其中一個執行緒 put 的資料被覆蓋。

    如果多個執行緒同時檢測到元素個數超過陣列大小 * loadFactor,這樣就會發生多個執行緒同時對 Node 陣列進行擴容,都在重新計算元素位置以及複製資料,但是最終只有一個執行緒擴容後的陣列會賦給 table,也就是說其他執行緒的都會丟失,並且各自執行緒 put