1. 程式人生 > >高併發下的HashMap有哪些問題?

高併發下的HashMap有哪些問題?

HashMap在擴容時要進行resize操作,擴容分為兩步:
1、申請一個新陣列,長度是原來的2倍
2、遍歷原陣列,將原始重新hash進新陣列,hash公式:

index=HashCode(Key) & (length-1)

如果HashMap到達臨界容量需要擴容,兩個執行緒同時進行resize操作,同時開闢兩塊空間,執行緒掛起時機不當時,rehash會產生環路。

當然,還會發生,一個執行緒迭代時,另一個執行緒做插入刪除操作,造成迭代的fast-fail
根本原因是沒有鎖機制,一個執行緒的修改會影響另一個執行緒的操作。