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

    若是多個線程同時使用 put 方法添加元素,並且假設正好存在兩個 put 的 key 發生了碰撞(根據 hash 值計算的 bucket 同樣),那麼根據 HashMap 的實現,這兩個 key 會添加到數組的同一個位置,這樣最終就會發生其中一個線程 put 的數據被覆蓋。數組

    若是多個線程同時檢測到元素個數超過數組大小 * loadFactor,這樣就會發生多個線程同時對 Node 數組進行擴容,都在從新計算元素位置以及複製數據,可是最終只有一個線程擴容後的數組會賦給 table,也就是說其餘線程的都會丟失,而且各自線程 put 的數據也丟失。線程

相關文章
相關標籤/搜索