【JAVA】concurrentHashMap和HashTable有什么区别

🍎个人博客:个人主页

🏆个人专栏:JAVA

⛳️  功不唐捐,玉汝于成


目录

前言

正文

同步性质:

性能:

允许空键值(Allow Nulls):

迭代器(Iterator):

继承关系:

结语

 我的其他博客


前言

在Java的集合框架中,ConcurrentHashMapHashTable 都提供了线程安全的哈希表实现,用于在多线程环境中安全地存储和检索数据。然而,它们在实现方式、性能和功能上存在一些显著的区别,因此在选择使用时需要根据具体的需求和场景进行权衡。

正文

ConcurrentHashMapHashTable 都是Java中用于实现线程安全的哈希表的类,但它们在实现方式和性能上有一些区别。

  1. 同步性质:

    • ConcurrentHashMap 采用分段锁(Segment)的方式,不同的段(Segment)可以由不同的线程同时操作,以提高并发性。在Java 8及以后版本,ConcurrentHashMap 进一步引入了CAS(Compare and Swap)操作,以提高并发性能。
    • HashTable 使用一个全局的锁,即每次对 HashTable 的修改都需要获得全局锁,因此在多线程环境下性能相对较低。
  2. 性能:

    • ConcurrentHashMap 由于采用分段锁的机制,不同的线程可以同时访问不同的段,从而提高并发性能。在读多写少的场景中,性能较好。
    • HashTable 由于使用全局锁,对整个表的修改都需要获得锁,性能相对较低。在高并发环境下,由于锁的竞争可能导致性能瓶颈。
  3. 允许空键值(Allow Nulls):

    • ConcurrentHashMap 允许 null 的键和值。
    • HashTable 不允许 null 的键和值。如果试图将 null 存入 HashTable,将会抛出 NullPointerException
  4. 迭代器(Iterator):

    • ConcurrentHashMap 支持在并发修改的情况下使用迭代器,但是迭代器的弱一致性特性可能会导致迭代时某些元素的改变不可见。
    • HashTable 如果在迭代过程中对表进行了结构性的修改,如添加或删除元素,将会抛出 ConcurrentModificationException 异常。
  5. 继承关系:

    • ConcurrentHashMap 实现了 ConcurrentMap 接口,属于Java Collections Framework的一部分。
    • HashTable 实现了 Map 接口,也是Java Collections Framework的一部分,但已被认为是遗留类,不推荐在新代码中使用。

总体而言,ConcurrentHashMap 在并发性能和功能上相对于 HashTable 更为优越,尤其在高并发环境下。在现代Java中,通常推荐使用 ConcurrentHashMap 代替 HashTable

结语

在并发编程中,选择适当的数据结构对于程序的性能和可维护性至关重要。ConcurrentHashMap 通过分段锁和 CAS 操作等机制在高并发环境中表现出色,而 HashTable 由于全局锁的设计在高并发下性能相对较低。在现代Java应用中,通常推荐使用 ConcurrentHashMap 作为线程安全的哈希表实现。通过深入理解它们的区别,希望你能够在实际开发中更好地选择和使用这两种集合类,以达到更好的性能和可维护性。

 我的其他博客

【MySQL】数据库规范化的三大法则 — 一探范式设计原则-CSDN博客

【JAVA】线程的run()和start()有什么区别?-CSDN博客

【日常聊聊】程序员必备的面试技巧:如何在面试战场上脱颖而出-CSDN博客

【JAVA】Java8开始ConcurrentHashMap,为什么舍弃分段锁-CSDN博客

【JAVA】怎么确保一个集合不能被修改-CSDN博客

【Web开发】会话管理与无 Cookie 环境下的实现策略-CSDN博客

【Mybatis】Mybatis如何防止sql注入-CSDN博客

【软件工程】航行敏捷之路:深度解析Scrum框架的精髓-CSDN博客

【Spring】理解IoC与AOP:构建灵活而模块化的软件架构-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/344403.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Emgu.CV教程】5.1、几何变换之平移

图像的几何变换对于图像处理来说,也是最基础的那一档次,包括平移、旋转、缩放、透视变换等等,也就是对图像整理形状的改变,用到的函数都比较简单,理解起来也很容易。但是为了凑字数,还是一个函数一个函数的…

InternLM第3次课作业

部署 参考github教程:https://github.com/InternLM/tutorial/tree/main/langchain 问题1: windows端口映射过程命令 ssh -i C:\\Users\\breat/.ssh/id_rsa.pub -CNg -L 7860:127.0.0.1:7860 rootssh.intern-ai.org.cn -p 3 4145 中,提示找不…

JavaScript数据类型、判断、检测

JavaScript数据类型 number、string、boolean、null、undefined、symbol、bigint Object【Array、RegExp、Date、Math、Function】 存储方式 1. 基础类型存储在栈内存中,被引用或者拷贝时,会创建一个完全相同的变量。 2. 引用类型存放在堆内存中&…

Linux基础工具的使用(yum,vim,gcc,g++,gdb,make/makefile)【详解】

目录 linux软件包管理器-yum什么是软件包?查找软件包如何安装软件卸载软件 linux编辑器 - vimvim的基本概念vim模式之间的切换vim命令模式各命令汇总vim底行模式各命令汇总 Linux编译器 - gcc/ggcc/g的作用gcc/g选项预处理编译汇编链接静态库与动态库 Linux调试器 -…

四川古力未来科技有限公司:抖音小店的崛起之路

随着互联网的飞速发展,电子商务已经成为人们日常生活中不可或缺的一部分。作为一家以科技为核心的公司,四川古力未来科技有限公司在电子商务领域中崭露头角,特别是其抖音小店的发展引人注目。 四川古力未来科技有限公司的抖音小店自开业以来&…

066:vue中实现二维数组的全选、全不选、反选、部分全选功能(图文示例)

第061个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使用,computed,watch,生命周期(beforeCreate,created,beforeM…

【LeetCode:30. 串联所有单词的子串 | 滑动窗口 + 哈希表】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

2024年湖北职称评审对论文的要求

1.期刊发表版面的时间节点2024年12月及之前 2.期刊是正规的期刊,有国内刊号 3.期刊能在国家出版社总署检索到 4.文章内容查重符合知网查重标准 5.论文方向和申报专业方向一致 6.必须要是第一作者或者独著 7.评正高的人才们要准备中文核心论文两篇或出版专业学术论著…

brpc: a little source code

之前在https://www.yuque.com/treblez/qksu6c/nqe8ip59cwegl6rk?singleDoc# 《olap/clickhouse-编译器优化与向量化》中我谈过brpc的汇编控制bthread。本文就来看一下brpc作为一个高性能的rpc实现,除了自定义线程栈之外,代码还有什么优秀之处。 因为时间…

kylin4.0.3升级问题

话接前文: kylin升级(3.0.1->kylin-4.0.3)-CSDN博客文章浏览阅读941次,点赞29次,收藏12次。原本的cube太多了,换其他OLAP数据库太麻烦。相比之下,升级是一个很好的选择(官网有说明内存降低和构…

目标检测-One Stage-YOLOx

文章目录 前言一、YOLOx的网络结构和流程1.YOLOx的不同版本2.Yolox-Darknet53YOLOv3 baselineYolox-Darknet53 3.Yolox-s/Yolox-m/Yolox-l/Yolox-x4.Yolox-Nano/Yolox-Tiny 二、YOLOx的创新点总结 前言 根据前文CenterNet、YOLOv4等可以看出学界和工业界都在积极探索使用各种t…

Java入门IDEA基础语法

1:Java入门 1.1 Java简介 Java是什么: Java是一门非常优秀的计算机语言 语言:人与人交流沟通的表达方式 计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言 Java之父:詹姆斯高斯林(James Gosli…