ConcurrentHashMap

ConcurrentHashMap的并發(fā)度是什么?

ConcurrentHashMap的并發(fā)度就是segment的大小,默認(rèn)為16,這意味著最多同時(shí)可以有16條線程操作ConcurrentHashMap,這也是ConcurrentHashMap對(duì)Hashtable的最大優(yōu)勢(shì),任何情況下,Hashtable能同時(shí)有兩條線程獲取Hashtable中的數(shù)據(jù)嗎?

ConcurrentHashMap的工作原理

ConcurrentHashMap在jdk 1.6和jdk 1.8實(shí)現(xiàn)原理是不同的。

jdk 1.6:

ConcurrentHashMap是線程安全的,但是與Hashtablea相比,實(shí)現(xiàn)線程安全的方式不同。Hashtable是通過對(duì)hash表結(jié)構(gòu)進(jìn)行鎖定,是阻塞式的,當(dāng)一個(gè)線程占有這個(gè)鎖時(shí),其他線程必須阻塞等待其釋放鎖。ConcurrentHashMap是采用分離鎖的方式,它并沒有對(duì)整個(gè)hash表進(jìn)行鎖定,而是局部鎖定,也就是說當(dāng)一個(gè)線程占有這個(gè)局部鎖時(shí),不影響其他線程對(duì)hash表其他地方的訪問。

具體實(shí)現(xiàn):ConcurrentHashMap內(nèi)部有一個(gè)Segment.

jdk 1.8

在jdk 8中,ConcurrentHashMap不再使用Segment分離鎖,而是采用一種樂觀鎖CAS算法來實(shí)現(xiàn)同步問題,但其底層還是“數(shù)組+鏈表->紅黑樹”的實(shí)現(xiàn)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容