91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

ConcurrentHashMap的概述

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

掃碼添加小助手

加入工程師交流群

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

jdk1.7

jdk1.8

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

歷史版本對(duì)比

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

1.?dāng)?shù)據(jù)結(jié)構(gòu)

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

2.鎖的粒度:

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

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

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

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

sizeCtl:

多個(gè)線程的共享變量,是操作的控制標(biāo)識(shí)符,它的作用不僅包括threshold的作用,在不同的地方有不同的值也有不同的用途。

-1代表正在初始化

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

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

MOVED,TREEBIN,RESERVED :

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


// ForwardingNode標(biāo)記節(jié)點(diǎn)的hash值(表示正在擴(kuò)容)

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

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

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)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7342

    瀏覽量

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

    關(guān)注

    30

    文章

    4973

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    PCBA單板工藝概述

    PCBA(Printed Circuit Board Assembly)是印刷電路板組裝的簡(jiǎn)稱,涉及電路板的組裝和加工。以下是對(duì)PCBA單板工藝知識(shí)庫(kù)的詳細(xì)歸納: 一、PCBA單板工藝概述 PCBA
    的頭像 發(fā)表于 02-27 14:31 ?577次閱讀
    PCBA單板工藝<b class='flag-5'>概述</b>

    【「龍芯之光 自主可控處理器設(shè)計(jì)解析」閱讀體驗(yàn)】--全書概覽與概述

    感謝論壇與出版社提供此書以及作者編著此書。下面是書籍實(shí)物,不是很厚但很通俗易懂、簡(jiǎn)明概要。 首先對(duì)全書章節(jié)進(jìn)行概覽,然后對(duì)第一章概述進(jìn)行閱讀學(xué)習(xí)。 全書分6章,在架構(gòu)、工具鏈、案例方面進(jìn)行了介紹
    發(fā)表于 01-18 12:58

    【Nordic隨筆】藍(lán)牙6.2核心規(guī)范概述

    藍(lán)牙6.2核心規(guī)范概述 2025年11月份藍(lán)牙聯(lián)盟發(fā)布了一項(xiàng)重要更新,主要在安全性,低延遲上面實(shí)現(xiàn)了新的突破 參考文獻(xiàn):https://www.bluetooth.com/blog
    的頭像 發(fā)表于 11-27 17:11 ?1661次閱讀
    【Nordic隨筆】藍(lán)牙6.2核心規(guī)范<b class='flag-5'>概述</b>

    緩存之美:從根上理解 ConcurrentHashMap

    本文將詳細(xì)介紹 ConcurrentHashMap 構(gòu)造方法、添加值方法和擴(kuò)容操作等源碼實(shí)現(xiàn)。 ConcurrentHashMap 是線程安全的哈希表,此哈希表的設(shè)計(jì)主要目的是在最小化更新操作對(duì)哈希
    的頭像 發(fā)表于 08-05 14:48 ?604次閱讀

    神經(jīng)系統(tǒng)系列之概述

    神經(jīng)系統(tǒng)總體概述核心功能:感知刺激(Sensation)→信息整合(Integration)→產(chǎn)生反應(yīng)(Response)。兩大解剖分區(qū):1.中樞神經(jīng)系統(tǒng)(CNS):腦(Brain)和脊髓
    的頭像 發(fā)表于 07-28 20:45 ?3162次閱讀
    神經(jīng)系統(tǒng)系列之<b class='flag-5'>概述</b>

    UI開發(fā)概述

    基于ArkTS的聲明式開發(fā)范式的方舟開發(fā)框架是一套開發(fā)極簡(jiǎn)、高性能、支持跨設(shè)備的UI開發(fā)框架,提供了構(gòu)建應(yīng)用UI所必需的能力,主要包括: ArkTS ArkTS是優(yōu)選的主力應(yīng)用開發(fā)語(yǔ)言,圍繞應(yīng)用開發(fā)在TypeScript(簡(jiǎn)稱TS)生態(tài)基礎(chǔ)上做了進(jìn)一步擴(kuò)展。擴(kuò)展能力包含聲明式UI描述、自定義組件、動(dòng)態(tài)擴(kuò)展UI元素、狀態(tài)管理和渲染控制。狀態(tài)管理作為基于ArkTS的聲明式開發(fā)范式的特色,通過功能不同的裝飾器給開發(fā)者提供了清晰的頁(yè)面更新渲染流程和管道。狀態(tài)管理包括UI組件狀態(tài)和應(yīng)用程序狀態(tài),兩者協(xié)作可以使開發(fā)者完整地構(gòu)建整個(gè)應(yīng)用的數(shù)據(jù)更新和UI渲染。ArkTS語(yǔ)言的基礎(chǔ)知識(shí)請(qǐng)參考初識(shí)ArkTS語(yǔ)言。 布局 布局是UI的必要元素,它定義了組件在界面中的位置。ArkUI框架提供了多種布局方式,除了基礎(chǔ)的線性布局、層疊布局、彈性布局、相對(duì)布局、柵格布局外,也提供了相對(duì)復(fù)雜的列表、宮格、輪播。 組件 組件是UI的必要元素,形成了在界面中的樣子,由框架直接提供的稱為系統(tǒng)組件,由開發(fā)者定義的稱為自定義組件。系統(tǒng)內(nèi)置組件包括按鈕、單選框、進(jìn)度條、文本等。開發(fā)者可以通過鏈?zhǔn)秸{(diào)用的方式設(shè)置系統(tǒng)內(nèi)置組件的渲染效果。開發(fā)者可以將系統(tǒng)內(nèi)置組件組合為自定義組件,通過這種方式將頁(yè)面組件化為一個(gè)個(gè)獨(dú)立的UI單元,實(shí)現(xiàn)頁(yè)面不同單元的獨(dú)立創(chuàng)建、開發(fā)和復(fù)用,具有更強(qiáng)的工程性。 頁(yè)面路由和組件導(dǎo)航 應(yīng)用可能包含多個(gè)頁(yè)面,可通過頁(yè)面路由實(shí)現(xiàn)頁(yè)面間的跳轉(zhuǎn)。一個(gè)頁(yè)面內(nèi)可能存在組件間的導(dǎo)航如典型的分欄,可通過導(dǎo)航組件實(shí)現(xiàn)組件間的導(dǎo)航。 圖形 方舟開發(fā)框架提供了多種類型圖片的顯示能力和多種自定義繪制的能力,以滿足開發(fā)者的自定義繪圖需求,支持繪制形狀、填充顏色、繪制文本、變形與裁剪、嵌入圖片等。 動(dòng)畫 動(dòng)畫是UI的重要元素之一。優(yōu)秀的動(dòng)畫設(shè)計(jì)能夠極大地提升用戶體驗(yàn),框架提供了豐富的動(dòng)畫能力,除了組件內(nèi)置動(dòng)畫效果外,還包括屬性動(dòng)畫、顯式動(dòng)畫、自定義轉(zhuǎn)場(chǎng)動(dòng)畫以及動(dòng)畫API等,開發(fā)者可以通過封裝的物理模型或者調(diào)用動(dòng)畫能力API來(lái)實(shí)現(xiàn)自定義動(dòng)畫軌跡。 交互事件 交互事件是UI和用戶交互的必要元素。方舟開發(fā)框架提供了多種交互事件,除了觸摸事件、鼠標(biāo)事件、鍵盤按鍵事件、焦點(diǎn)事件等通用事件外,還包括基于通用事件進(jìn)行進(jìn)一步識(shí)別的手勢(shì)事件。手勢(shì)事件有單一手勢(shì)如點(diǎn)擊手勢(shì)、長(zhǎng)按手勢(shì)、拖動(dòng)手勢(shì)、捏合手勢(shì)、旋轉(zhuǎn)手勢(shì)、滑動(dòng)手勢(shì),以及通過單一手勢(shì)事件進(jìn)行組合的組合手勢(shì)事件。 特點(diǎn) 開發(fā)效率高,開發(fā)體驗(yàn)好 代碼簡(jiǎn)潔:通過接近自然語(yǔ)義的方式描述UI,不必關(guān)心框架如何實(shí)現(xiàn)UI繪制和渲染。 數(shù)據(jù)驅(qū)動(dòng)UI變化:讓開發(fā)者更專注自身業(yè)務(wù)邏輯的處理。當(dāng)UI發(fā)生變化時(shí),開發(fā)者無(wú)需編寫在不同的UI之間進(jìn)行切換的UI代碼, 開發(fā)人員僅需要編寫引起界面變化的數(shù)據(jù),具體UI如何變化交給框架。 開發(fā)體驗(yàn)好:界面也是代碼,讓開發(fā)者的編程體驗(yàn)得到提升。 性能優(yōu)越 聲明式UI前端和UI后端分層:UI后端采用C++語(yǔ)言構(gòu)建,提供對(duì)應(yīng)前端的基礎(chǔ)組件、布局、動(dòng)效、交互事件、組件狀態(tài)管理和渲染管線。 語(yǔ)言編譯器和運(yùn)行時(shí)的優(yōu)化:統(tǒng)一字節(jié)碼、高效FFI-Foreign Function Interface、AOT-Ahead Of Time、引擎極小化、類型優(yōu)化等。 生態(tài)容易快速推進(jìn)能夠借力主流語(yǔ)言生態(tài)快速推進(jìn),語(yǔ)言相對(duì)中立友好,有相應(yīng)的標(biāo)準(zhǔn)組織可以逐步演進(jìn)。 整體架構(gòu) 圖1 整體架構(gòu)圖 聲明式UI前端提供了UI開發(fā)范式的基礎(chǔ)語(yǔ)言規(guī)范,并提供內(nèi)置的UI組件、布局和動(dòng)畫,提供了多種狀態(tài)管理機(jī)制,為應(yīng)用開發(fā)者提供一系列接口支持。 語(yǔ)言運(yùn)行時(shí)選用方舟語(yǔ)言運(yùn)行時(shí),提供了針對(duì)UI范式語(yǔ)法的解析能力、跨語(yǔ)言調(diào)用支持的能力和TS語(yǔ)言高性能運(yùn)行環(huán)境。 聲明式UI后端引擎后端引擎提供了兼容不同開發(fā)范式的UI渲染管線,提供多種基礎(chǔ)組件、布局計(jì)算、動(dòng)效、交互事件,提供了狀態(tài)管理和繪制能力。 渲染引擎提供了高效的繪制能力,將渲染管線收集的渲染指令,繪制到屏幕的能力。 平臺(tái)適配層提供了對(duì)系統(tǒng)平臺(tái)的抽象接口,具備接入不同系統(tǒng)的能力,如系統(tǒng)渲染管線、生命周期調(diào)度等。 開發(fā)流程 使用UI開發(fā)框架開發(fā)應(yīng)用時(shí),主要涉及如下開發(fā)過程。開發(fā)者可以先通過第一個(gè)入門實(shí)例了解整個(gè)應(yīng)用的UI開發(fā)過程。 任務(wù)簡(jiǎn)介相關(guān)指導(dǎo)學(xué)習(xí)ArkTS介紹了ArkTS的基本語(yǔ)法、狀態(tài)管理和渲染控制的場(chǎng)景。- 基本語(yǔ)法 - 狀態(tài)管理 - 渲染控制 開發(fā)布局介紹了幾種常用的布局方式。- 常用布局 添加組件介紹了幾種常用的內(nèi)置組件、自定義組件以及通過API方式支持的界面元素。- 常用組件 - 自定義組件 - 氣泡和菜單 設(shè)置頁(yè)面路由和組件導(dǎo)航介紹了如何設(shè)置頁(yè)面路由以及組件間的導(dǎo)航。- 頁(yè)面路由 - 組件導(dǎo)航 顯示圖形介紹了如何顯示圖片、繪制自定義幾何圖形以及使用畫布繪制自定義圖形。- 圖片 - 幾何圖形 - 畫布 使用動(dòng)畫介紹了組件和頁(yè)面使用動(dòng)畫的典型場(chǎng)景。- 屬性動(dòng)畫 - 轉(zhuǎn)場(chǎng)動(dòng)畫 - 組件動(dòng)畫 - 動(dòng)畫曲線 - 動(dòng)畫銜接 - 動(dòng)畫效果 綁定事件介紹了事件的基本概念和如何使用通用事件和手勢(shì)事件。- 通用事件 - 手勢(shì)事件
    發(fā)表于 06-24 06:36

    FA模型和Stage模型API切換概述

    API切換概述 FA模型和Stage模型由于線程模型和進(jìn)程模型的差異,部分接口僅在FA模型下才能使用,針對(duì)這部分接口在SDK的接口中有FAModelOnly的標(biāo)記,用于提醒開發(fā)者這部分接口僅能
    發(fā)表于 06-06 06:29

    Thread標(biāo)準(zhǔn)認(rèn)證概述

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

    DataAbility組件概述介紹

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

    智慧能源安全概述

    智慧能源安全概述 1. 智慧能源的技術(shù)架構(gòu) 智慧能源系統(tǒng)通過物聯(lián)網(wǎng)(IoT)、大數(shù)據(jù)、人工智能等技術(shù)實(shí)現(xiàn)能源生產(chǎn)、傳輸、消費(fèi)的智能化管理。其核心包括: 感知層:智能電表、傳感器實(shí)時(shí)采集電網(wǎng)運(yùn)行
    的頭像 發(fā)表于 05-18 17:11 ?727次閱讀

    納芯微電子工業(yè)控制、機(jī)器人解決方案器件選型概述

    納芯微電子工業(yè)控制、機(jī)器人解決方案器件選型概述
    的頭像 發(fā)表于 05-15 14:40 ?1042次閱讀
    納芯微電子工業(yè)控制、機(jī)器人解決方案器件選型<b class='flag-5'>概述</b>

    變壓器的概述

    需要完整版資料可下載附件查看哦!
    發(fā)表于 05-06 14:59

    變壓器的概述

    需要完整版資料可下載附件查看哦!
    發(fā)表于 04-30 14:39

    鴻蒙應(yīng)用元服務(wù)開發(fā)-Account Kit獲取華為賬號(hào)用戶信息概述

    一、概述 當(dāng)元服務(wù)需要完善用戶個(gè)人資料(頭像、手機(jī)號(hào)、收貨地址、發(fā)票抬頭)時(shí),可通過Account Kit提供的相關(guān)能力,引導(dǎo)用戶填寫、管理相關(guān)信息并完成授權(quán)。獲取頭像、手機(jī)號(hào)、收貨地址、發(fā)票抬頭
    發(fā)表于 04-02 11:10

    電機(jī)基礎(chǔ)和電機(jī)驅(qū)動(dòng)概述

    純分享貼,有需要可以直接下載附件獲取完整資料! (如果內(nèi)容有幫助可以關(guān)注、點(diǎn)贊、評(píng)論支持一下哦~)
    發(fā)表于 04-01 15:51