码迷,mamicode.com
首页 > 其他好文 > 详细

ConcurrentHashMap和Hashtable区别?

时间:2019-01-11 17:24:20      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:数据   另一个   实现   分数   高并发   table   cas   链表   bsp   

1、底层数据结构:

JDK1.7的ConcurrentHashMap底层使用分段的数据+链表实现,JDK1.8采用的数据结构和HashMap1.8的结构一样。数据+链表/红黑二叉树。

Hashttable和JDK1.8之前的HashMap的底层数据结构类似都是采用数据+链表的形式,数组是HashMap的主体,链表是为了解决哈希冲突而存在的。

2、实现线程安全的方式(重要):

在JDK1.7的时候,ConcurrentHashMap(分段锁)对整个桶数组进行了分割分段(Segment),每一把锁只锁容器其中的一部分数据,多线程访问容器里不同数据段的数据,就不会存在锁竞争,提高并发访问率。

在JDK1.8的时候,已经摒弃了Segment的概念,而是直接用 Node 数组+链表+红黑树的数据结构来实现,并发控制使用 synchronized 和 CAS 来操作。

Hashtable(同一把锁),使用synchronsized来保证线程安全,效率低下。当一个线程访问同步方法时,其他线程也访问同步方法时,可能会进入阻塞或轮询状态,如使用put添加元素,另一个线程不能使用put添加元素,也不能get。

 

ConcurrentHashMap和Hashtable区别?

标签:数据   另一个   实现   分数   高并发   table   cas   链表   bsp   

原文地址:https://www.cnblogs.com/wylwyl/p/10255722.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!