99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ConcurrentHashMap的概述

電子設(shè)計 ? 來源:電子設(shè)計 ? 作者:電子設(shè)計 ? 2020-12-24 14:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

數(shù)據(jù)結(jié)構(gòu)

jdk1.7

jdk1.8

如果頭節(jié)點是Node類型,其后就是一個普通的鏈表;如果頭節(jié)點是TreeNode類型,它的后面就是一顆紅黑樹,TreeNode是Node的子類。鏈表和紅黑樹之間可以相互轉(zhuǎn)換:初始的時候是鏈表,當鏈表中的元素超過某個閾值時,把鏈表轉(zhuǎn)換成紅黑樹;反之,當紅黑樹中的元素個數(shù)小于某個閾值時,再轉(zhuǎn)換為鏈表。

歷史版本對比

從JDK1.7版本的ReentrantLock+Segment+HashEntry,到JDK1.8版本中synchronized+CAS+HashEntry+紅黑樹。代碼量從原來的1000多行變成了 6000多 行,實現(xiàn)上也和原來的分段式存儲有很大的區(qū)別。

1.數(shù)據(jù)結(jié)構(gòu)

取消了Segment分段鎖的數(shù)據(jù)結(jié)構(gòu),取而代之的是數(shù)組+鏈表+紅黑樹的結(jié)構(gòu)。使用紅黑樹,當一個槽里有很多元素時,查詢時間復(fù)雜度從原來的遍歷鏈表O(n),變成遍歷紅黑樹O(logN),Hash沖突的問題也會得到較好的解決

2.鎖的粒度:

JDK1.7采用segment的分段鎖機制實現(xiàn)線程安全,其中segment繼承自ReentrantLock。JDK1.8采用CAS+Synchronized保證線程安全。原來是對需要進行數(shù)據(jù)操作的Segment加鎖,現(xiàn)調(diào)整為對每個頭節(jié)點分別加鎖,其并發(fā)度,就是Node數(shù)組的長度,初始長度為16,這降低了鎖的粒度。

3.并發(fā)的擴容:

在JDK 7中,一旦Segment的個數(shù)在初始化的時候確立,不能再更改,并發(fā)度被固定。之后只是在每個Segment內(nèi)部擴容,這意味著每個Segment獨立擴容,互不影響,不存在并發(fā)擴容的問題。但在JDK 8中,相當于只有1個Segment,當一個線程要擴容Node數(shù)組的時候,其他線程還要讀寫,因此處理過會更復(fù)雜。

4.代碼實現(xiàn)上的區(qū)別:

sizeCtl:

多個線程的共享變量,是操作的控制標識符,它的作用不僅包括threshold的作用,在不同的地方有不同的值也有不同的用途。

-1代表正在初始化

-N 表示正在進行擴容操作。此時sizeCtl的高16位代表的是當前的容量(并不是數(shù)值等于容量大?。?低16位代表線程數(shù) 容量16的話計算rs = 32795 也就是 1000 0000 0001 1011 可以看出不同的容量對應(yīng)不同rs值, rs << 16 的值為 11111111111111111111111111111111 10000000000110110000000000000000, 0-15位用于統(tǒng)計參與擴容的線程數(shù), 16-31位用于代表擴容時容器的大小。

正數(shù)或0代表hash表還沒有被初始化,這個數(shù)值表示初始化或下一次進行擴容的大小,這一點類似于擴容閾值的概念。后面可以看到,它的值始終是當前ConcurrentHashMap容量的0.75倍,這與loadfactor是對應(yīng)的。

MOVED,TREEBIN,RESERVED :

MOVED,TREEBIN,RESERVED是用來表示特殊節(jié)點的哈希值。該類特殊節(jié)點均不含實際元素,且其哈希值被設(shè)置為負數(shù)和普通節(jié)點區(qū)分。


// ForwardingNode標記節(jié)點的hash值(表示正在擴容)

static final int MOVED = -1; // hash for forwarding nodes

// TreeBin節(jié)點的hash值,它是對應(yīng)桶的根節(jié)點

static final int TREEBIN = -2; // hash for roots of trees

static final int RESERVED = -3; // hash for transient reservations

審核編輯:符乾江
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7256

    瀏覽量

    91831
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70705
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    Thread標準認證概述

    本篇知識庫文章概述了開發(fā)人員如何將其Thread物聯(lián)網(wǎng)設(shè)備進行Thread Group認證所需的步驟,并重點介紹使用Silicon Labs(芯科科技)的EFR32無線射頻器件的相關(guān)流程。
    的頭像 發(fā)表于 06-04 10:10 ?290次閱讀
    Thread標準認證<b class='flag-5'>概述</b>

    DataAbility組件概述介紹

    DataAbility組件概述 DataAbility,即\"使用Data模板的Ability\",主要用于對外部提供統(tǒng)一的數(shù)據(jù)訪問抽象,不提供用戶交互界面
    發(fā)表于 05-28 08:19

    GD32H7系列MCU安全啟動概述

    電子發(fā)燒友網(wǎng)站提供《GD32H7系列MCU安全啟動概述.pdf》資料免費下載
    發(fā)表于 01-17 15:34 ?0次下載
    GD32H7系列MCU安全啟動<b class='flag-5'>概述</b>

    TMS320C6000 DSP外設(shè)概述參考指南

    電子發(fā)燒友網(wǎng)站提供《TMS320C6000 DSP外設(shè)概述參考指南.pdf》資料免費下載
    發(fā)表于 12-30 16:35 ?0次下載
    TMS320C6000 DSP外設(shè)<b class='flag-5'>概述</b>參考指南

    緩存之美——如何選擇合適的本地緩存?

    Guava cache是Google開發(fā)的Guava工具包中一套完善的JVM本地緩存框架,底層實現(xiàn)的數(shù)據(jù)結(jié)構(gòu)類似于ConcurrentHashMap,但是進行了更多的能力拓展,包括緩存過期時間設(shè)置、緩存容量設(shè)置、多種淘汰策略、緩存監(jiān)控等,下面簡單介紹下這些功能及其使用方式。
    的頭像 發(fā)表于 11-17 14:24 ?816次閱讀
    緩存之美——如何選擇合適的本地緩存?

    AM/DM37x概述

    電子發(fā)燒友網(wǎng)站提供《AM/DM37x概述.pdf》資料免費下載
    發(fā)表于 10-14 11:32 ?0次下載
    AM/DM37x<b class='flag-5'>概述</b>

    TAS2563設(shè)備特性和控制概述

    電子發(fā)燒友網(wǎng)站提供《TAS2563設(shè)備特性和控制概述.pdf》資料免費下載
    發(fā)表于 10-08 11:49 ?0次下載
    TAS2563設(shè)備特性和控制<b class='flag-5'>概述</b>

    TI Wi-Fi測試策略概述

    電子發(fā)燒友網(wǎng)站提供《TI Wi-Fi測試策略概述.pdf》資料免費下載
    發(fā)表于 09-20 10:46 ?1次下載
    TI Wi-Fi測試策略<b class='flag-5'>概述</b>

    Jacinto 7顯示子系統(tǒng)概述應(yīng)用說明

    電子發(fā)燒友網(wǎng)站提供《Jacinto 7顯示子系統(tǒng)概述應(yīng)用說明.pdf》資料免費下載
    發(fā)表于 09-14 10:00 ?0次下載
    Jacinto 7顯示子系統(tǒng)<b class='flag-5'>概述</b>應(yīng)用說明

    轉(zhuǎn)換 SDIO 的電壓產(chǎn)品概述

    電子發(fā)燒友網(wǎng)站提供《轉(zhuǎn)換 SDIO 的電壓產(chǎn)品概述.pdf》資料免費下載
    發(fā)表于 09-13 10:29 ?0次下載
    轉(zhuǎn)換 SDIO 的電壓產(chǎn)品<b class='flag-5'>概述</b>

    PCle鏈路培訓(xùn)概述

    電子發(fā)燒友網(wǎng)站提供《PCle鏈路培訓(xùn)概述.pdf》資料免費下載
    發(fā)表于 09-11 09:16 ?0次下載
    PCle鏈路培訓(xùn)<b class='flag-5'>概述</b>

    AM263到AM263P遷移概述

    電子發(fā)燒友網(wǎng)站提供《AM263到AM263P遷移概述.pdf》資料免費下載
    發(fā)表于 08-30 10:58 ?0次下載
    AM263到AM263P遷移<b class='flag-5'>概述</b>

    毫米波生產(chǎn)測試概述

    電子發(fā)燒友網(wǎng)站提供《毫米波生產(chǎn)測試概述.pdf》資料免費下載
    發(fā)表于 08-27 09:44 ?0次下載
    毫米波生產(chǎn)測試<b class='flag-5'>概述</b>

    內(nèi)部補償高級電流模式(ACM)概述

    電子發(fā)燒友網(wǎng)站提供《內(nèi)部補償高級電流模式(ACM)概述.pdf》資料免費下載
    發(fā)表于 08-26 14:55 ?1次下載
    內(nèi)部補償高級電流模式(ACM)<b class='flag-5'>概述</b>

    人工智能概述

    人工智能關(guān)鍵技術(shù)概述
    發(fā)表于 07-17 17:17 ?0次下載