比思論壇

標題: ConcurrentHashMap 和 Hashtable 的区别 [打印本頁]

作者: 642377962    時間: 2021-12-7 10:28
標題: ConcurrentHashMap 和 Hashtable 的区别
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,竞争会越来越激烈效率越低。
作者: jf222    時間: 2022-7-28 02:27
提示: 作者被禁止或刪除 內容自動屏蔽
作者: 510148703    時間: 2023-11-5 05:45
女神级颜值。玩的够嗨的!
作者: a806936976    時間: 2023-11-7 21:46
提示: 作者被禁止或刪除 內容自動屏蔽
作者: isflyis    時間: 2023-11-10 21:30
提示: 作者被禁止或刪除 內容自動屏蔽
作者: yie623164585    時間: 2023-11-12 05:35
提示: 作者被禁止或刪除 內容自動屏蔽
作者: 305819816    時間: 2024-4-4 19:53
有气质。,就是身材有点一般了。不过依然很给力
作者: xcc198895    時間: 2024-4-8 02:08
很青春,逼逼也很粉。很不错!




歡迎光臨 比思論壇 (http://108.170.10.237/) Powered by Discuz! X2.5