当前位置: 首页 > 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,因为它使用了更高效的并发控制机制。

总结

在这里插入图片描述

http://www.dtcms.com/a/131476.html

相关文章:

  • 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新特性
  • 在springboot项目中调用第三方天气api服务
  • js中 剩余运算符(Rest Operator )(...)和展开运算符(Spread Operator)(...)的区别及用法
  • 基于open3d的一些常见点云操作
  • 【数据结构_4】顺序表
  • Adobe After Effects的插件--------Optical Flares之面板属性
  • KWDB创作者计划—KWDB场景创新:多模态数据融合与边缘智能的产业实践
  • 中厂算法岗面试总结
  • 【SLAM】在ORB_SLAM2的ROS模式下使用RealSense D435相机
  • R语言——直方图
  • (自用)若依生成左树右表