HashMap在并發(fā)下可能出現(xiàn)的問(wèn)題分析

1.rehash的時(shí)候,resize調(diào)用transfer,會(huì)產(chǎn)生循環(huán)鏈表,造成Infinte Loop

2.多線程put的時(shí)候可能導(dǎo)致元素丟失


替代方案:

a. HashTable:線程安全,key和value都不能為null

b. ConcurrentHashMap,線程安全的分段鎖實(shí)現(xiàn)(jdk1.6中采用重入鎖 ReentrantLock來(lái)支持分段寫(xiě),jdk8中采用CAS,直接synchronized,底層仍然采用數(shù)組+鏈表+紅黑樹(shù))

c. synchronizedMap()方法包裝一下HashMap,不常用。

相關(guān)點(diǎn):

LinkedHashMap:有序的map,底層是雙向鏈表;

TreeMap:TreeMap 的實(shí)現(xiàn)就是紅黑樹(shù)數(shù)據(jù)結(jié)構(gòu),是一棵自平衡的排序二叉樹(shù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容