【多线程】多线程(12):多线程环境下使用哈希表
【多线程环境下使用哈希表(重点掌握)】
可以使用类:“ConcurrentHashMap”
★ConcurrentHashMap对比HashMap和Hashtable的优化点
1.优化了锁的粒度【最核心】
//Hashtable的加锁,就是直接给put,get等方法加上synchronized,就是给this加锁,整个哈希表对象就是一把锁,任何一个针对这个哈希表的操作都会触发锁竞争
而ConcurrentHashMap是给每个哈希表中的“链表”进行加锁(将每个链表头都作为一个锁对象),构成多把锁,形成“锁桶”

这可以保证线程安全
这可以大大降低锁冲突的概率(只有同时进行的两次修改,恰好在修改同一个链表上元素时,才会触发锁冲突)
2.引入了CAS原子操作
哈希表有一个size(链表大小)这样的变量,针对像修改size这样的操作,直接借助CAS完成,不会加锁
3.针对读操作,做了特殊处理
上述的加锁,只是针对写操作来加锁
对于读操作,通过volatile以及一些精巧的代码实现,确保读操作不会读到“修改一半的数据”
4.针对哈希表的扩容,进行了特殊的优化,可以令操作更加稳定
普通哈希表扩容,需要创建新的哈希表,把元素都搬运过去,这一系列操作,很有可能就在一次put就完成了,就会令这次put开销很大,耗时长
ConcurrentHashMap进行了“化整为零”,不会在一次操作中进行所有的数据搬运,而是一次只搬运一部分(创建新空间的同时,也保留旧空间),此时后续的每次操作都会触发一部分key的搬运,最终把所有的key都搬运完成
当新旧空间同时存在时:
1.插入操作——直接插入到新的空间中
2.查询/修改/删除,都是需要同时对旧的空间和新的空间进行操作
相关文章:
【多线程】多线程(12):多线程环境下使用哈希表
【多线程环境下使用哈希表(重点掌握)】 可以使用类:“ConcurrentHashMap” ★ConcurrentHashMap对比HashMap和Hashtable的优化点 1.优化了锁的粒度【最核心】 //Hashtable的加锁,就是直接给put,get等方法加上synch…...
轻量服务器和云服务器ecs哪个好用一些?
轻量服务器和云服务器ecs哪个好用一些?轻量服务器与云服务器ECS在多方面存在显著差异,对于需要高性能计算和大规模数据处理的用户来说,ECS可能是更好的选择;而对于预算有限且需求较为简单的用户来说,轻量服务器可能更为…...
【交通标志识别系统】Python+卷积神经网络算法+人工智能+深度学习+机器学习+算法模型
一、介绍 交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高…...
特种设备作业叉车司机试题附答案
1.发生事故要本着"( )不放过"的原则,查明原因、分清责任、严肃处理。 A.三 B.四 C.五 答案:B 2.柴油发动机在压缩行程终了时气体的温度和压力都比汽油机( )。 A.低 B.高 C.相同 答案:B 3.柴油发动机的压缩比比汽…...
【Nginx系列】Nginx启动失败
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
2024/10/12 计组大题专训
2018: 2019: 2020: 2021:...
2024年腾讯外包面试题(微创公司)
笔试: 1、判断异步执行顺序 console.log(1);setTimeout(()>{Promise.resolve().then(()>{console.log(2);})console.log(3);},0);new Promise ((resolve)>{for(let i0; i<1000;i ){if(i1000){resolve();}}console.log(4);}).then(()>{console.log(5…...
nginx运行时报:No rule to make target ‘build‘, needed by ‘deault‘.Stop
项目场景: 部署前端项目,将打好的前端包,放到服务器上,运行nginx执行,结果nginx运行报错。 问题描述 nginx运行报以下错误: No rule to make target ‘build‘, needed by ‘deault‘.Stop原因分析&…...
dvwa:暴力破解、命令注入、csrf全难度详解
暴力破解 easy模式 hydra -L /usr/share/wordlists/SecLists-master/Usernames/top-usernames-shortlist.txt -P /usr/share/wordlists/SecLists-master/Passwords/500-worst-passwords.txt 192.168.72.1 http-get-form "/dvwa/vulnerabilities/brute/:username^USER^&…...
Java-学生管理系统[初阶]
这次我们来尝试使用Java实现一下"学生管理系统",顾名思义,就是实现一个能用来管理学生各种数据的系统。在后续学习中我们将对"学生管理系统"进行两种实现: 📚 学生管理系统[初阶](不带模拟登录系统) &#…...
微信小程序 详情图片预览功能实现详解
详情图片预览功能实现详解 在开发微信小程序时,我们经常需要实现点击商品图片进行全屏预览的功能。这不仅提升了用户体验,还允许用户进行保存图片、发送给朋友等操作。本文将详细介绍如何实现这一功能。 思路分析 当用户在商品详情页点击图片时&#…...
LeetCode 48 Rotate Image 解题思路和python代码
题目: You are given an n x n 2D matrix representing an image, rotate the image by 90 degrees (clockwise). You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and …...
余承东直播论道智能驾驶:激光雷达不可或缺,华为ADS 3.0引领安全创新
华为余承东:激光雷达,智能驾驶安全性的关键 9月29日,华为消费者业务集团CEO余承东在一场引人注目的直播中,与知名主持人马东就智能驾驶技术的最新进展进行了深入交流。在这场直播中,余承东针对激光雷达在智能驾驶中的必要性问题,发表了明确且深刻的观点,引发了业界和公众…...
51WORLD携手浙江科技大学,打造智慧校园新标杆
当前,国家教育数字化战略行动扎实推进,高等教育数字化转型步伐加快。 紧抓数字教育发展战略机遇,浙江科技大学联合51WORLD、正方软件股份有限公司(简称:正方软件),共同研发打造浙科大孪生数智校…...
SAP SD学习笔记09 - 受注传票中的不完全Log 和 Business Partner(取引先机能)
好久没写SD了,今天继续写。 上一章讲了SD的如下知识 - SD的售前的流程(引合和見積(询价和报价)) - 数据流的概念,主要就是后传票可以参照前传票,以实现数据的流动,减少输入 - Co…...
【ROS2】里程计(odometry)数据计算、发布
1、里程计消息 1.1 Odometry消息 消息描述:nav_msgs::msg::Odometry 是ROS2中用发布里程计信息的消息,包括:线速度、角速度、位置和朝向 消息路径:/opt/ros/humble/share/nav_msgs/msg/Odometry.msg 消息内容: # 包含父ID std_msgs/Header header# 子ID,即姿势所在的坐…...
AcWing 187 导弹防御系统 暴搜
代码 #include <bits/stdc.h> #define int long long using namespace std;const int N 200010, mod 1e9 7;int n, m, k, x, y, z, ans, t, depth; int w[N], f[N]; int up[N], down[N];bool dfs(int depth, int u, int su, int sd) {if (su sd > depth) return …...
SpringSecurity(三)——自定义优化器
在SpringSecurity中,如果我们在认证或者授权的过程中出现了异常会被ExceptionTranslationFilter捕 获到。在ExceptionTranslationFilter中会去判断是认证失败还是授权失败出现的异常。 一、自定义验证异常类 创建exception包,在exception包下创建自定义…...
STM32通用定时器TIM3的PWM输出实验配置步骤
通用定时器 PWM 输出实验 本小节我们来学习使用通用定时器的 PWM 输出模式。 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。我们可以让定时…...
device tree 预研
linux kernel 引入 dts 的背景 http://www.wowotech.net/linux_kenrel/why-dt.html 什么是 device tree device tree 是一种描述硬件资源的数据结构。device tree 可以描述的信息包括 cpu 的数量和类别、内存基地址和大小、clock 控制器和 clock 使用情况、外设基地址以及…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
Android写一个捕获全局异常的工具类
项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...
