成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

再次聊聊并發(fā)編程:并發(fā)容器

開發(fā) 前端
ConcurrentHashMap 是一種 key 無序的 HashMap,ConcurrentSkipListMap則是 key 有序的, 實(shí)現(xiàn)了NavigableMap接口,此接口又繼承了SortedMap接口。

一、ConcurrentLinkedQueue/Deque

AQS內(nèi)部的阻塞隊(duì)列實(shí)現(xiàn)原理:基于雙向鏈表,通過對(duì)head/tail進(jìn)行CAS操作,實(shí)現(xiàn)入隊(duì)和出隊(duì)。

ConcurrentLinkedQueue 的實(shí)現(xiàn)原理和AQS 內(nèi)部的阻塞隊(duì)列類似:同樣是基于 CAS,同樣是通過 head/tail指針記錄隊(duì)列頭部和尾部,但還是有稍許差別。

其次,在AQS的阻塞隊(duì)列中,每次入隊(duì)后,tail一定后移一個(gè)位置;每次出隊(duì),head一定后移一個(gè) 位置,以保證head指向隊(duì)列頭部,tail指向鏈表尾部。

但在ConcurrentLinkedQueue中,head/tail的更新可能落后于節(jié)點(diǎn)的入隊(duì)和出隊(duì),因?yàn)樗皇侵?接對(duì) head/tail指針進(jìn)行 CAS操作的,而是對(duì) Node中的 item進(jìn)行操作。

二、ConcurrentHashMap

HashMap通常的實(shí)現(xiàn)方式是“數(shù)組+鏈表”,這種方式被稱為“拉鏈法”。ConcurrentHashMap在這個(gè) 基本原理之上進(jìn)行了各種優(yōu)化。

首先是所有數(shù)據(jù)都放在一個(gè)大的HashMap中;其次是引入了紅黑樹。

如果頭節(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)換為鏈表。

那為什么要做這種設(shè)計(jì)呢?

1. 使用紅黑樹,當(dāng)一個(gè)槽里有很多元素時(shí),其查詢和更新速度會(huì)比鏈表快很多,Hash沖突的問 題由此得到較好的解決。

2. 加鎖的粒度,并非整個(gè)ConcurrentHashMap,而是對(duì)每個(gè)頭節(jié)點(diǎn)分別加鎖,即并發(fā)度,就是 Node數(shù)組的長(zhǎng)度,初始長(zhǎng)度為16。

3. 并發(fā)擴(kuò)容,這是難度最大的。當(dāng)一個(gè)線程要擴(kuò)容Node數(shù)組的時(shí)候,其他線程還要讀寫,因此 處理過程很復(fù)雜,后面會(huì)詳細(xì)分析。

由上述對(duì)比可以總結(jié)出來:這種設(shè)計(jì)一方面降低了Hash沖突,另一方面也提升了并發(fā)度。

三、ConcurrentSkipListMap/Set

ConcurrentHashMap 是一種 key 無序的 HashMap,ConcurrentSkipListMap則是 key 有序的, 實(shí)現(xiàn)了NavigableMap接口,此接口又繼承了SortedMap接口。

1、ConcurrentSkipListMap

為什么要使用SkipList實(shí)現(xiàn)Map?

在Java的util包中,有一個(gè)非線程安全的HashMap,也就是TreeMap,是key有序的,基于紅黑樹實(shí) 現(xiàn)。 而在Concurrent包中,提供的key有序的HashMap,也就是ConcurrentSkipListMap,是基于 SkipList(跳查表)來實(shí)現(xiàn)的。

這里為什么不用紅黑樹,而用跳查表來實(shí)現(xiàn)呢?

也就是目前計(jì)算機(jī)領(lǐng)域還未找到一種高效的、作用在樹上的、無鎖的、增加和刪除節(jié)點(diǎn)的辦法。

2、ConcurrentSkipListSet

ConcurrentSkipListSet只是對(duì)ConcurrentSkipListMap的簡(jiǎn)單封裝。

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2022-03-09 09:43:20

并發(fā)編程Java

2019-11-07 09:20:29

Java線程操作系統(tǒng)

2022-05-02 21:47:13

并發(fā)編程線程

2023-06-14 08:15:34

算法合并操作Winner

2023-07-11 08:34:25

參數(shù)流程類型

2022-03-02 08:20:54

并發(fā)編程java后端開發(fā)

2023-07-04 13:36:00

同步工具類Phaser

2024-10-14 12:34:08

2023-06-30 08:27:20

2017-09-19 14:53:37

Java并發(fā)編程并發(fā)代碼設(shè)計(jì)

2016-11-25 00:38:45

隔離負(fù)載均衡系統(tǒng)

2023-11-20 08:01:38

并發(fā)處理數(shù)Tomcat

2025-06-10 10:15:00

Java容器并發(fā)

2011-12-12 11:16:02

iOS并發(fā)編程

2022-10-17 08:07:13

Go 語言并發(fā)編程

2021-09-06 11:58:24

Python腳本Jmeter

2024-03-12 13:11:20

powerjob單機(jī)線程

2022-06-12 06:45:26

高并發(fā)防重

2016-11-28 09:00:10

瀏覽器瀏覽器緩存服務(wù)端

2016-11-25 00:45:37

隊(duì)列數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: av免费在线观看网站 | 免费在线一区二区三区 | 高清国产一区二区 | 一级毛片视频 | 欧美激情在线观看一区二区三区 | 欧美精品久久久久 | 久久这里只有精品首页 | 天堂免费看片 | 男人的天堂一级片 | 7799精品视频天天看 | 一区二区亚洲 | 亚洲欧美激情国产综合久久久 | 成人一区二区三区视频 | 亚洲成人福利在线观看 | 99福利| 国产 日韩 欧美 在线 | 粉嫩一区二区三区性色av | 亚洲影音先锋 | 99久久久99久久国产片鸭王 | 国产精品欧美一区喷水 | 亚洲精品中文字幕中文字幕 | 国产色婷婷精品综合在线播放 | 91视频91 | 中文字幕在线观看精品 | 免费成年网站 | 日韩视频一区 | 成人国产免费视频 | 中文字幕一区二区三区四区五区 | 成人免费在线网 | 日本久久综合网 | 99久久精品免费视频 | 午夜精品一区二区三区在线观看 | 精品亚洲91 | 日韩午夜场 | 亚洲激情综合网 | 日本黄色免费大片 | 免费成人毛片 | 日日干夜夜操天天操 | 亚洲成人免费观看 | 精品欧美乱码久久久久久 | 日韩久久精品 |