国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

ConcurrentHashMap初探

2019-11-14 15:42:40
字體:
供稿:網(wǎng)友

  在項(xiàng)目中集合的使用非常頻繁,最原始的就是數(shù)組Array,集合List提供了增加和刪除的便利以及擴(kuò)展,同時(shí)為了更快的搜尋效率,我們選擇Map映射表。Map中我們用的最多的是hashMap,它提供了較好的查詢速度,時(shí)間復(fù)雜度在O(1)。這些都是常規(guī)使用的集合。但是時(shí)常會有并發(fā)的要求,對于Map類,有一個(gè)HashTable可選,這個(gè)即實(shí)現(xiàn)了鍵值對的映射功能,同時(shí)也支持并發(fā)操作。HashTable實(shí)現(xiàn)原理主要是在hashMap上加了一個(gè)鎖,操作hashtable時(shí)會對它上鎖。這樣效率就大大下降。對于低并發(fā)可能還不是很大影響,如果同時(shí)并發(fā)成百上千的訪問,那么等待代價(jià)太大。

  基于以上問題,java.util.concurrent包提供了一個(gè)更好的并發(fā)映射集合類ConcurrentHashMap,從字面意思可以理解為并發(fā)的哈希映射表。那么為什么這個(gè)類的效率就逼HashTable高呢,下面來分析一下ConcurrentHashMap的結(jié)構(gòu)。

 

類中包含兩個(gè)重要的內(nèi)部類,一個(gè)為Segment,可以理解為一個(gè)段,每個(gè)段包含鍵值對

    一個(gè)為HashEntry,儲存鍵值對實(shí)體。

實(shí)現(xiàn)原理是:每次put數(shù)據(jù)時(shí),并不會對整個(gè)類進(jìn)行加鎖。首先獲取的是鍵的哈希值,根據(jù)哈希值找到對應(yīng)Segment,然后對segment進(jìn)行加鎖。這樣當(dāng)多個(gè)線程對該集合操作是,如果不是元素不是在同一個(gè)Segment內(nèi),那么它們之間并不會阻塞,自然效率較高。Segment 實(shí)現(xiàn)類似于HashMap.

  取數(shù)據(jù)則沿著存取路徑反取,先找到具體Segment,然后在Segment中根據(jù)哈希值找鍵值對。

   這是對ConcurrentHashMap的初步了解,后面會對源碼分析。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 东方市| 沧州市| 淮滨县| 祁东县| 阳城县| 宕昌县| 青冈县| 三原县| 广州市| 昌平区| 和林格尔县| 祁东县| 新丰县| 获嘉县| 汤原县| 思南县| 郓城县| 蓬安县| 乃东县| 平阴县| 河西区| 江达县| 武胜县| 霍林郭勒市| 招远市| 紫金县| 米泉市| 福贡县| 敦化市| 莱州市| 平和县| 茂名市| 南京市| 安多县| 民权县| 冀州市| 蓝田县| 邮箱| 乾安县| 启东市| 北宁市|