一瘪板、HashTable(線程安全)
讀方法寫(xiě)寫(xiě)方法都加鎖鹅龄,鎖數(shù)量太少揩慕,競(jìng)爭(zhēng)激烈
image.png
image.png
image.png
二、ConcurrentHashMap(線程安全)
對(duì)hash值扮休,進(jìn)行分段加鎖迎卤,hash值處在同一個(gè)segment的進(jìn)行加鎖。
1. 多線程HashMap出現(xiàn)死循環(huán)的問(wèn)題
擴(kuò)容時(shí)玷坠,同時(shí)調(diào)用reHash方法蜗搔,導(dǎo)致形成環(huán)形列表,且有些元素位置錯(cuò)亂侨糟。下次獲取元素時(shí)碍扔,可能會(huì)在循環(huán)列表中獲取,但是元素錯(cuò)亂后秕重,無(wú)法找到不同,導(dǎo)致死循環(huán)。
2.ConcurrentHashMap分段加鎖原理
2.1spread進(jìn)行分組
image.png
2.2 put操作時(shí)
如果hash位置沒(méi)有元素溶耘,采用cas寫(xiě)入元素
image.png
如果hash位置已有元素二拐,且對(duì)象相等,則更新
如果hash碰撞凳兵,則synchronied加鎖操作