|簡體中文

比思論壇

 找回密碼
 按這成為會員
搜索



查看: 2180|回復: 7
打印 上一主題 下一主題

[應用程式] ConcurrentHashMap 和 Hashtable 的区别

[複製鏈接]

19

主題

1

好友

278

積分

小學生

Rank: 2

該用戶從未簽到

推廣值
0
貢獻值
0
金錢
1348
威望
278
主題
19
跳轉到指定樓層
樓主
發表於 2021-12-7 10:28:11 |只看該作者 |倒序瀏覽
ConcurrentHashMap 和 Hashtable 的区别主要体现在实现线程安全的方式上不同。

底层数据结构: JDK1.7的 ConcurrentHashMap 底层采用 分段的数组+链表 实现,JDK1.8 采用的数据结构跟HashMap1.8的结构一样,数组+链表/红黑二叉树。Hashtable 和 JDK1.8 之前的 HashMap 的底层数据结构类似都是采用 数组+链表 的形式,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的;
实现线程安全的方式:

在JDK1.7的时候,ConcurrentHashMap(分段锁) 对整个桶数组进行了分割分段(Segment),每一把锁只锁容器其中一部分数据,多线程访问容器里不同数据段的数据,就不会存在锁竞争,提高并发访问率。(默认分配16个Segment,比Hashtable效率提高16倍。) 到了 JDK1.8 的时候已经摒弃了Segment的概念,而是直接用 Node 数组+链表+红黑树的数据结构来实现,并发控制使用 synchronized 和 CAS 来操作。(JDK1.6以后 对 synchronized锁做了很多优化) 整个看起来就像是优化过且线程安全的 HashMap,虽然在JDK1.8中还能看到 Segment 的数据结构,但是已经简化了属性,只是为了兼容旧版本;
② Hashtable(同一把锁) :使用 synchronized 来保证线程安全,效率非常低下。当一个线程访问同步方法时,其他线程也访问同步方法,可能会进入阻塞或轮询状态,如使用 put 添加元素,另一个线程不能使用 put 添加元素,也不能使用 get,竞争会越来越激烈效率越低。
頭像被屏蔽

8

主題

0

好友

2801

積分

禁止發言

  • TA的每日心情
    慵懶
    2023-7-23 17:55
  • 簽到天數: 1435 天

    [LV.10]以壇為家III

    推廣值
    0
    貢獻值
    0
    金錢
    2906
    威望
    2801
    主題
    8
    沙發
    發表於 2022-7-28 02:27:46 |只看該作者
    提示: 作者被禁止或刪除 內容自動屏蔽
    回復

    使用道具 舉報

    0

    主題

    1

    好友

    590

    積分

    中學生

    Rank: 3Rank: 3

  • TA的每日心情
    開心
    昨天 08:08
  • 簽到天數: 53 天

    [LV.5]常住居民I

    推廣值
    0
    貢獻值
    0
    金錢
    104
    威望
    590
    主題
    0
    板凳
    發表於 2023-11-5 05:45:58 |只看該作者
    女神级颜值。玩的够嗨的!
    回復

    使用道具 舉報

    頭像被屏蔽

    0

    主題

    5

    好友

    422

    積分

    禁止發言

  • TA的每日心情
    無聊
    2021-1-8 10:14
  • 簽到天數: 152 天

    [LV.7]常住居民III

    推廣值
    0
    貢獻值
    0
    金錢
    1908
    威望
    422
    主題
    0

    簽到勳章 男生勳章

    地板
    發表於 2023-11-7 21:46:58 |只看該作者
    提示: 作者被禁止或刪除 內容自動屏蔽
    回復

    使用道具 舉報

    頭像被屏蔽

    7

    主題

    0

    好友

    18

    積分

    禁止訪問

  • TA的每日心情

    2024-8-24 01:01
  • 簽到天數: 17 天

    [LV.4]偶爾看看III

    推廣值
    0
    貢獻值
    0
    金錢
    20
    威望
    18
    主題
    7
    5#
    發表於 2023-11-10 21:30:27 |只看該作者
    提示: 作者被禁止或刪除 內容自動屏蔽
    回復

    使用道具 舉報

    頭像被屏蔽

    0

    主題

    0

    好友

    119

    積分

    禁止訪問

  • TA的每日心情
    郁悶
    2024-3-7 15:29
  • 簽到天數: 10 天

    [LV.3]偶爾看看II

    推廣值
    0
    貢獻值
    0
    金錢
    25
    威望
    119
    主題
    0
    6#
    發表於 2023-11-12 05:35:15 |只看該作者
    提示: 作者被禁止或刪除 內容自動屏蔽
    回復

    使用道具 舉報

    頭像被屏蔽

    4

    主題

    0

    好友

    125

    積分

    禁止發言

  • TA的每日心情

    2024-10-19 13:57
  • 簽到天數: 28 天

    [LV.4]偶爾看看III

     成長值: 350

    推廣值
    0
    貢獻值
    0
    金錢
    13
    威望
    125
    主題
    4
    7#
    發表於 2024-4-4 19:53:11 |只看該作者
    提示: 作者被禁止或刪除 內容自動屏蔽
    回復

    使用道具 舉報

    0

    主題

    0

    好友

    293

    積分

    比思貴賓

    Rank: 2

  • TA的每日心情
    擦汗
    2024-10-7 02:07
  • 簽到天數: 52 天

    [LV.5]常住居民I

     成長值: 330

    推廣值
    0
    貢獻值
    0
    金錢
    30
    威望
    293
    主題
    0
    8#
    發表於 2024-4-8 02:08:11 |只看該作者
    很青春,逼逼也很粉。很不错!
    回復

    使用道具 舉報

    您需要登錄後才可以回帖 登錄 | 按這成為會員

    重要聲明:本論壇是以即時上載留言的方式運作,比思論壇對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,讀者及用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,讀者及用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本論壇受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者及用戶發現有留言出現問題,請聯絡我們比思論壇有權刪除任何留言及拒絕任何人士上載留言 (刪除前或不會作事先警告及通知 ),同時亦有不刪除留言的權利,如有任何爭議,管理員擁有最終的詮釋權。用戶切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。

    手機版| 廣告聯繫

    GMT+8, 2024-11-3 00:28 , Processed in 0.016567 second(s), 15 queries , Gzip On, Memcache On.

    Powered by Discuz! X2.5

    © 2001-2012 Comsenz Inc.

    回頂部