Java知识小干货, ConcurrentHashMap 和 Hashtable 的区别?_java自学_java相关资讯_成都java培训机构

Java知识小干货, ConcurrentHashMap 和 Hashtable 的区别?

  • 作者:创始人
  • 发表时间:2022-01-04 10:24:18

在学习Java过程中会学习到HashMap 和 Hashtable那么 ConcurrentHashMap 和 Hashtable 的区别是什么?

ConcurrentHashMap和Hashtable之间的差异主要是通过不同的方式实现线程安全。

基础数据结构:底层ConcurrentHashMapJDK1.7使用了分段的数组+链表实现,JDK1.8使用数组+链表,就像HashMap1.8那样使用数组+链表/红二叉树。在Hashtable和JDK1.8之前,HashMap在底层数据结构上类似地采用数组+链表的形式,数组是HashMap的主体,链表主要是用来解决哈希冲突;

 ConcurrentHashMap 和 Hashtable 的区别?

如何实现线程安全(重要):1、JDK1.7中,ConcurrentHashMap(分段锁定)将整个桶数组分割(Segment),每个锁都锁住容器中的部分数据,多线程访问容器中不同数据段的数据,就没有锁竞争,提高了并发存取率。(默认分配16个Segment,是Hashtable效率的16倍。在JDK1.8之前,已经不再使用Segment的概念,而是直接使用Node数组+链表+红黑树来实现,并且使用同步控制和CAS操作。(在JDK1.6之后对synchronized锁进行了许多优化)整个过程看上去就像经过优化和线程安全的HashMap,尽管您也可以看到JDK1.8中Segment的数据结构,但它简化了属性,这仅仅是为了与旧版本兼容;2、Hashtable(同样的锁):使用同步的锁来确保线程安全,工作效率很低。如果一个线程访问了同步方法,那么其他线程也访问了同步方法,那么就会进入阻塞状态或轮询状态,比如添加元素的put,另一个线程无法用put添加元素,无法使用get,竞争就会变得越来越低效。

ConcurrentHashMap 和 Hashtable 的区别是什么?关注知了堂成都Java培训,带你了解更多Java相关知识和相关问题。