比思論壇
標題:
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://bbb-ccc.buzz/)
Powered by Discuz! X2.5