ConcurrentHashMap 和 Hashtable 的區(qū)別

  1. 底層數(shù)據(jù)結(jié)構(gòu): JDK1.7 的 ConcurrentHashMap 底層采用 分段數(shù)組+鏈表 實(shí)現(xiàn),而 JDK1.8 的 ConcurrentHashMap 實(shí)現(xiàn)跟 HashMap1.8 的數(shù)據(jù)結(jié)構(gòu)一樣,都是 數(shù)組+鏈表/紅黑二叉樹(shù)。Hashtable 和 JDK1.8 之前的 HashMap 的底層數(shù)據(jù)結(jié)構(gòu)類似,都是采用 數(shù)組+鏈表 的形式。數(shù)組是 HashMap 的主體,鏈表則是為了解決哈希沖突而存在的;

  2. 實(shí)現(xiàn)線程安全的方式: ① 在 JDK1.7 的時(shí)候,ConcurrentHashMap(分段鎖) 對(duì)整個(gè)桶數(shù)組進(jìn)行了分割分段( Segment ),每一把鎖只鎖容器其中的一部分?jǐn)?shù)據(jù),這樣多線程訪問(wèn)容器里不同數(shù)據(jù)段的數(shù)據(jù),就不會(huì)存在鎖競(jìng)爭(zhēng),提高了并發(fā)訪問(wèn)率。 到了 JDK1.8,摒棄了 Segment 的概念,而是直接用 Node 數(shù)組+鏈表+紅黑樹(shù)的數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn),并發(fā)控制使用 synchronized 和 CAS 來(lái)操作,(JDK1.6 以后對(duì) synchronized 鎖做了很多的優(yōu)化) 整個(gè)看起來(lái)就像是優(yōu)化過(guò)且線程安全的 HashMap,雖然在 JDK1.8 中還能看到 Segment 的數(shù)據(jù)結(jié)構(gòu),但是已經(jīng)簡(jiǎn)化了屬性,只是為了兼容舊版本;② Hashtable (同一把鎖) :使用 synchronized 來(lái)保證線程安全,效率非常低下。一個(gè)線程訪問(wèn)同步方法時(shí),當(dāng)其他線程也訪問(wèn)同步方法,可能會(huì)進(jìn)入阻塞或輪詢狀態(tài),如使用 put 添加元素,另一個(gè)線程就不能使用 put 添加元素,也不能使用 get,競(jìng)爭(zhēng)會(huì)越來(lái)越激烈,效率就越低。

對(duì)比圖:

  • Hashtable
Hashtable
  • JDK1.7 的 ConcurrentHashMap
JDK1.7 的 ConcurrentHashMap
  • JDK1.8 的 ConcurrentHashMap(TreeBin: 紅黑二叉樹(shù)節(jié)點(diǎn);Node: 鏈表節(jié)點(diǎn))
JDK1.8 的 ConcurrentHashMap
最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • hashmap的底層實(shí)現(xiàn) JDK1.8以前Hashmap底層是數(shù)組和鏈表結(jié)合在一起使用,也就是散列鏈表。hashm...
    Tim在路上閱讀 567評(píng)論 0 4
  • 原文轉(zhuǎn)自:http://www.54tianzhisheng.cn/2017/06/10/HashMap-Hash...
    beneke閱讀 3,225評(píng)論 1 66
  • 十年商海幾沉浮, 自傷情,欲怒吼。 百次商機(jī),難以言鴻溝。 縱然思慮千萬(wàn)縷,感為先,智滯后。 秋來(lái)蕭蕭風(fēng)雨透,無(wú)奔...
    云詩(shī)一線閱讀 348評(píng)論 0 4
  • 1. Vue-router的安裝 通過(guò)項(xiàng)目根目錄下package.json文件引入vue-router 在cmd中...
    tcwcq閱讀 1,131評(píng)論 0 1
  • 今日春分,春過(guò)半,春風(fēng)吹開(kāi)了桃紅梨白,春雷敲門(mén)萬(wàn)物蘇醒,春雨淅淅瀝瀝,草長(zhǎng)鶯飛,菜花黃黃。 三月的春,...
    漓園閱讀 460評(píng)論 0 5

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