[JAVAEE] 面试题(五) - HashMap, Hashtable, ConcurrentHashMap

目录

  • 一. Hashtable
    • 1.1 Hashtable效率低下的原因:
  • 二. ConcurrentHashMap
    • 2.1 ConcurrentHashMap更高效的原因:
  • 三. HashMap, Hashtable, ConcurrentHashMap 之间的区别

HashMap是线程不安全的.
在多线程环境下, 使用:

  • Hashtable
  • ConcurrentHashMap

来确保线程安全.

一. Hashtable

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如上所示, Hashtable类中所有涉及线程安全的方法和大部分不涉及线程安全的方法都被加上了synchronized关键字, 来确保线程安全.

1.1 Hashtable效率低下的原因:

  • Hashtable类中的所有桶, 共同持有一个锁, 竞争激烈.
  • size的值会被频繁的修改, 这时修饰size的synchronized锁会升级成重量级锁.
  • 只能一个线程进行扩容操作, 运行效率低.

在这里插入图片描述
以上种种原因, 导致Hashtable是一种效率低下的哈希表, 因此, 现在使用更多的是ConcurrentHashMap.

二. ConcurrentHashMap

相比于Hashtable, ConcurrentHashMap的效率更高, 各项优化也做的更好.

2.1 ConcurrentHashMap更高效的原因:

  • 对读操作没有加锁, 并且使用volatile关键字来确保从内存中读取结果. 使用"锁桶"的方式对写操作进行加锁, 即对每个桶都分配一把锁, 大大降低了锁竞争的概率, 提高了程序运行效率.
  • 充分利用CAS特性, 比如size属性通过CAS操作来更新, 避免出现重量级锁的情况.
  • 优化了扩容方式, 化整为零. 即发现需要扩容的数组时, 创建一个新的数组, 然后多个线程同时进行扩容操作, 这样每个线程只需要负责一小部分的数据.

在这里插入图片描述

三. HashMap, Hashtable, ConcurrentHashMap 之间的区别

  • HashMap线程不安全, Key允许为null
  • Hashtable线程安全, Key不允许为null, 一个Hashtable对象只持有一把锁(即多个桶持有同一把锁).
  • ConcurrentHashMap线程安全,Key不允许为null, 一个Concurrent对象持有多把锁(即每个桶持有一把锁, 并且锁对象是每个链表头结点), 充分利用CAS并发机制(减少重量级锁的出现), 优化了扩容机制(多个线程进行赋值扩容).

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Vue 2 —Vue Router 页面导航和参数传递

当从A页面跳转到B页面的时候把数据也一起传递过去,可用Vue Router 功能: 一、. this.$router.push 方法 Vue Router 是 Vue.js 的官方路由管理器,允许你在应用中进行页面导航(即跳转到不同的 URL 路径)。 this.$rout…

Local Transfer 致力于更加便捷地共享传输文件

软件主页:https://illusionna.github.io/LocalTransfer

[AcWing算法基础课]动态规划之01背包

题目链接:01背包 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。 首先,我们…

标准、高效的管理测试用例和活动

送您一份新人礼,自动化测试平台限时免费体验~ 本文主要介绍测试用例管理的基础知识和基本使用方法,帮助您快速管理测试用例及活动。 操作流程 用例管理的主要使用流程如下: 1.新建测试用例 2.评审测试用例 3.创建测试计划 4.执行测试计划 5…

如何在jupyter notebook切换python环境

目录 1、切换到目标python环境,假设我的是叫“tf” C:\Users\hello>activate tf(tf) C:\Users\hello>2、安装notebook内核包 (tf) C:\Users\hello>pip install ipykernel3、将环境加入到notebook中 python -m ipykernel install --user --name pytorch --…

windows工具 -- 使用SpaceSniffer查看哪些文件夹占用那么大空间, 再也不用右键属性了

目的 C盘不知道哪些文件夹占用了那么多空间, 右键属性扫描太慢了 效果 运行效果 静态截图 下载使用 下载 SpaceSniffer https://github.com/redtrillix/SpaceSniffer/releases 解压到文件夹后, 双击运行

[DEBUG] 服务器 CORS 已经允许所有源,仍然有 304 的跨域问题

背景 今天有一台服务器到期了,准备把后端迁移到另一台服务器上,结果前端在测试的时候,出现了 304 的跨域问题。 调试过程中出现的问题,包括但不限于: set the request’s mode to ‘no-cors’Redirect is not allow…

智慧园区解决方案:科技赋能,打造未来管理新典范

智慧园区作为城市发展的重要组成部分,正以前所未有的速度蓬勃发展。随着5G、云计算、大数据、物联网(IoT)、BIM(建筑信息模型)、人工智能(AI)及区块链等前沿技术的日益成熟与融合应用&#xff0…

CTF记录

1. [SWPUCTF 2022 新生赛]android 用jadx打开,然后搜索NSS关键字 NSSCTF{a_simple_Android} 2. [SWPU 2024 新生引导]ez_SSTI 模板注入题目,直接焚靖可以秒了 填入数据 ls / 然后 cat /flag即可 获取成功 NSSCTF{2111e7ad-97c5-40d5-9a3b-a2f657bd45e8…

Vue使用富文本编辑器vue-quill-editor

Vue使用富文本编辑器 1. 安装 npm install vue-quill-editor -S2. 引入到项目中 有两种挂载方式: 全局挂载 和 在组件中挂载,根据自己的项目需求选择,一般用到富文本编辑都是在某一个项目中,我们这里为了方便大家选择&#xff…

AUTOSAR_EXP_ARAComAPI的7章笔记(2)

☞返回总目录 相关总结:服务发现实现策略总结 7.2 服务发现的实现策略 如前面章节所述,ara::com 期望产品供应商实现服务发现的功能。服务发现功能基本上是在 API 级别通过 FindService、OfferService 和 StopOfferService 方法定义的,协议…

windows yolo11 自定义训练

一、在yolo11源码文件夹创建一个train.py 内容如下: from ultralytics import YOLOif __name__ __main__:model YOLO(rultralytics/cfg/models/11/yolo11.yaml)model.train(datarD:/yolo11/WiderPerson_yolo/WiderPerson_yolo/WiderPerson_yolo.yaml,imgsz(640,3…

简述 synchronized 和 java.util.concurrent.locks.Lock 的异同?

大家好,我是锋哥。今天分享关于【简述 synchronized 和 java.util.concurrent.locks.Lock 的异同?】面试题。希望对大家有帮助; 简述 synchronized 和 java.util.concurrent.locks.Lock 的异同? 在Java编程中,synchro…

C语言中,“extern”关键字的含义与用法

在C语言中,extern 关键字用于声明一个已经在其他地方定义的变量或函数。它的主要作用是告诉编译器,某个变量或函数是在当前文件之外定义的,编译器应该在链接阶段找到这个变量或函数的实际定义。以下是 extern 的一些常见用途和用法&#xff1…

TCP最后一次握⼿连接阶段,如果ACK包丢失会怎样?

2024年10月NJSD技术盛典暨第十届NJSD软件开发者大会、第八届IAS互联网架构大会在南京召开。百度文心快码总经理臧志分享了《AI原生研发新范式的实践与思考》,探讨了大模型赋能下的研发变革及如何在公司和行业中落地,AI原生研发新范式的内涵和推动经验。 …

【大数据学习 | HBASE】hbase的读数据流程与hbase读取数据

1. hbase的读数据流程 在解析读取流程之前我们还需要知道两个功能性的组件和HFIle的格式信息 HFILE 存储在hdfs中的hbase文件,这个文件中会存在hbase中的数据以kv类型显示,同时还会存在hbase的元数据信息,包括整个hfile文件的索引大小&…

AI基础知识

目录 1.激活函数:one: 激活函数的作用:two: sigmoid函数:three: tanh函数:four: ReLu:five: Leaky ReLU 2.Softmax函数3.优化器:one: 优化器的作用:two: BGD(批梯度下降):three: SGD(随机梯度下降):four: MBGD(Mini Ba…

01背包问题(DP)

2. 01背包问题 - AcWing题库 DP做题思路分析 实现代码&#xff1a; #include <iostream> #include <algorithm>using namespace std;const int N 1010;int n , m; int v[N],w[N],dp[N][N];int main() {cin >> n >> m;for (int i 1;i < n;i) {ci…

如何提升自媒体发稿效果,必须掌握的几个技巧

在自媒体时代&#xff0c;发稿效果直接关系到内容的传播力与影响力。为了提升自媒体发稿效果&#xff0c;有几个关键技巧是每位自媒体人必须掌握的。以下是对这些技巧的详细阐述&#xff1a; 一、明确受众定位 首先&#xff0c;自媒体人需要明确自己的受众群体。这包括受众的…

充电桩基础设施的时空大数据分析:以深圳市为例

随着全球对可持续交通解决方案的需求不断增长&#xff0c;电动汽车&#xff08;EV&#xff09;作为减少交通领域碳排放的重要手段&#xff0c;受到了广泛的关注。然而&#xff0c;电动汽车的普及和发展面临着诸多挑战&#xff0c;其中充电基础设施的建设和管理尤为关键。为了更…