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

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

完善資料讓更多小伙伴認(rèn)識你,還能領(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)換:初始的時候是鏈表,當(dāng)鏈表中的元素超過某個閾值時,把鏈表轉(zhuǎn)換成紅黑樹;反之,當(dāng)紅黑樹中的元素個數(shù)小于某個閾值時,再轉(zhuǎn)換為鏈表。

歷史版本對比

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

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

取消了Segment分段鎖的數(shù)據(jù)結(jié)構(gòu),取而代之的是數(shù)組+鏈表+紅黑樹的結(jié)構(gòu)。使用紅黑樹,當(dāng)一個槽里有很多元素時,查詢時間復(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中,相當(dāng)于只有1個Segment,當(dāng)一個線程要擴容Node數(shù)組的時候,其他線程還要讀寫,因此處理過會更復(fù)雜。

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

sizeCtl:

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

-1代表正在初始化

-N 表示正在進行擴容操作。此時sizeCtl的高16位代表的是當(dāng)前的容量(并不是數(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ù)值表示初始化或下一次進行擴容的大小,這一點類似于擴容閾值的概念。后面可以看到,它的值始終是當(dāng)前ConcurrentHashMap容量的0.75倍,這與loadfactor是對應(yīng)的。

MOVED,TREEBIN,RESERVED :

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


// ForwardingNode標(biāo)記節(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

    文章

    7342

    瀏覽量

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

    關(guān)注

    30

    文章

    4973

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    PCBA單板工藝概述

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

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

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

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

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

    緩存之美:從根上理解 ConcurrentHashMap

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

    神經(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 ?3155次閱讀
    神經(jīng)系統(tǒng)系列之<b class='flag-5'>概述</b>

    UI開發(fā)概述

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

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

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

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

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

    DataAbility組件概述介紹

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

    智慧能源安全概述

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

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

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

    變壓器的概述

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

    變壓器的概述

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

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

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

    電機基礎(chǔ)和電機驅(qū)動概述

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