当前位置: 首页 > news >正文

HashTable,HashMap,ConcurrentHashMap之间的区别

文章目录

    • 线程安全方面
    • 性能方面
    • 总结

线程安全方面

HashMap线程不安全,HashMap的方法没有进行同步,多个线程同时访问HashMap,并至少有一个线程修改了其内容,则必须手动同步。
HashTable是线程安全的,在HashMap的基础上对其方法都加上了synchronized使其同步
ConcurrentHashMap是线程安全的,并不是对整个HasMap进行加锁,它使用了一种更细粒度的锁机制(分锁或CAS操作)

Java 7及之前版本
分段锁(Segment)机制:
将整个哈希表分成多个段(Segment)
每个段相当于一个独立的哈希表
不同段可以并发操作,相同段才需要竞争锁
Java 8及之后版本
改进为CAS+synchronized:废弃分段锁设计
使用Node数组+链表/红黑树结构
对单个桶(bucket)加锁(synchronized)
大量使用CAS(Compare-And-Swap)无锁算法

性能方面

Hashtable: 由于所有方法都是同步的,因此在多线程环境下性能较差。
HashMap: 在单线程环境下性能最好,因为它没有同步开销。
ConcurrentHashMap: 在多线程环境下性能优于Hashtable,因为它使用了更高效的并发控制机制。

总结

在这里插入图片描述

相关文章:

  • docker的目录挂载与卷映射
  • Nginx部署spa单页面的小bug
  • SQLite + Redis = Redka
  • NCCL使用指南-进阶篇
  • (个人题解)第十六届蓝桥杯大赛软件赛省赛C/C++ 研究生组
  • 架构师面试(二十九):TCP Socket 编程
  • MapStruct复制失败,属性为null,与lombok有关系
  • 【Flink运行时架构】重要概念
  • linux多线(进)程编程——(1)前置知识
  • HTML5/JS/Vue与Java后端技术类比(AI创作)
  • SpringBoot对接火山引擎大模型api实现图片识别与分析
  • 深入理解Liunx文件系统与日志分析
  • 尚硅谷2019版Java网络编程笔记
  • HBase客户端metacache缓存过期报错
  • Mybatis 中 mappers标签 package的使用
  • 一种基于学习的多尺度方法及其在非弹性碰撞问题中的应用·
  • 【Linux】VLAN配置命令
  • 【数据结构_6上篇】有关链表的oj题
  • 【含文档+PPT+源码】蛋糕商城预定App的设计与实现
  • HTML5新特性
  • 湖北鄂城:相继4所小学有学生腹泻呕吐,供餐企业负责人已被采取强制措施
  • 平安资管总经理罗水权因个人工作原因辞职
  • 范宇任上海宝山区副区长
  • 解密62个“千亿县”:强者恒强,新兴产业助新晋县崛起
  • 昂立教育:去年减亏1.39亿元,今年以“利润持续增长”为核心目标
  • 国家统计局:一季度全国规模以上文化及相关产业企业营业收入增长6.2%