广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 计算机学校 > 惠州计算机学校 > 正文

ConcurrentHashMap 和 Hashtable 的区别_惠州计算机Java培训学校

作者:黄君发布时间:2021-05-02分类:惠州计算机学校浏览:912


导读: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,竞争会越来越激烈效率越低。


点击咨询直接了解更多相关资料,我在惠州北大青鸟新方舟等你。

 

本文内容转载自网络,版权归原作者所有,如有侵权请联系我们进行删除。


标签:惠州计算机软件培训惠州计算件软件开发惠州计算机软件基础惠州计算机JAVA软件开发惠州Java培训学校惠州Java培训JAVA语言Web前端Java是什么Java开发JAVA入门


惠州计算机学校排行
标签列表
网站分类
文章归档
最近发表