ConcurrentHashMap 與HashTable

Run發表於2019-01-02

HashMap 在併發執行put操作時會引起死迴圈,因為多執行緒導致 HashMap 的 Entry 連結串列形成環形資料結構,則 Entry 的 next 節點永遠不為空,會死迴圈獲取 Entry。 HashTable 使用 synchronized 來保證執行緒安全,但是線上程競爭激烈的情況下,效率非常低。其原因是所有訪問該容器的執行緒都必須競爭一把鎖。 ConcurrentHashMap 使用鎖分段技術,容器裡有多把鎖,每一把鎖用於其中一部分資料,當多執行緒訪問不同資料段的資料時,執行緒間就不會存在鎖的競爭。陣列+連結串列+紅黑樹的儲存結構。

相關文章