栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

1.17 ConcurrentHashMap和Hashtable的区别

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

1.17 ConcurrentHashMap和Hashtable的区别

ConcurrentHashMap和Hashtable的区别
  1. 从底层数据结构来看:
    ConcurrentHashMap在JDK1.8之前,底层使用分段数组(segment数组存放Entry数组)实现,1.8之后使用的是数组+链表/红黑树结构;
    而Hashtable一直使用数组+链表结构;
  2. 从线程安全的实现方式来看:
    二者都是线程安全的,但是ConcurrentHashMap在JDK1.8之前使用分段锁的方法,一个ConcurrentHashMap有多个Segment,每个segment内存放多个Entry,Segment本身又实现了ReentrantLock,是可重入锁,所以要访问Entry时,要先获取它所在段的segment(分段锁),以每段的线程安全实现整个的线程安全;在1.8之后,使用了CAS和synchronized方法,给每个Node或者TreeBin都上了一把锁,以每个链表的头结点或红黑树的根节点的线程安全达到整个的线程安全,这时只有哈希冲突时才会发生锁竞争;
    而Hashtable实现线程安全只使用了一把锁sychronized,很容易发生竞争锁和阻塞轮询,效率低下;
    所以Hashtable基本被淘汰,新代码想要多线程使用Map建议选用ConcurrentHashMap;
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/325516.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号