ConcurrentHashMap如何實現高併發性的

1)利用鎖的分段,默認16個鎖共同維護整個ConcurrentHashMap,使一個寫線程不會持有整個ConcurrentHashMap的鎖,降低了持有鎖的頻率,大大的提高了併發性。

2)volatile變量的使用,根據先行發生原則:對於同一個volatile變量,一個寫操作會先行發生後面的讀操作,例如每一次寫操作完成後都會對volatile變量的count進行改寫,每次讀操作都會先行訪問這個count,從而使每次讀操作不用加鎖的情況下能夠得到正確的結果,實現了可見性,使得大多數讀都可以在不需要加鎖的情況下得到正確的值,因爲ConcurrentHashMap的key和value不能爲空,所以只有在讀到爲空的時候說明發生了錯誤,這個時候才需要加鎖讀取。

3)內部對象HashEntry的不變屬性next,每次插入只能在頭節點前面插入,在刪除一個節點,只是創建了新的部分鏈表,如果同時有讀線程在遍歷鏈表,可以不用加鎖且保證正確性,因爲原表仍然存在。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章