Java多线程(十二)

news2024/11/15 8:01:54

目录

一、多线程环境使用哈希表

1.1 HashTable

1.2 ConcurrentHashTable

 二、ConcurrentHashMap和Hashtable、HashMap 的区别


一、多线程环境使用哈希表

HashMap 本身就是线程不安全的,所以在多线程的环境下可以使用:HashTable、 ConcurrentHashMap

1.1 HashTable

HashTable 只是简单的把关键方法加上了 synchronized 关键字

 

这就相当于对 HashTable 本身直接加锁

  • 如果多线程直接访问同一个HashTable 就会直接造成冲突
  • size属性也是通过synchronized来控制同步,也会降低效率
  • 一旦触发扩容,该线程就会完成整个扩容的效果,这个过程会涉及到大量的元素拷贝,效率很低

1.2 ConcurrentHashTable

ConcurrentHashTable 没有直接对整个方法进行加锁,而是进行 “锁桶” 操作,这样就会大大降低锁冲突的概率。

  • 读操作没有加锁(但是使用了 volatile 关键字保证从内存中读取结果)
  • 利用CAS的特性来控制size 属性,避免出现重量级锁的情况。
  • 优化了扩容方式:化整为零
  • 发现需要扩容的线程, 只需要创建一个新的数组, 同时只搬几个元素过去.
  • 扩容期间, 新老数组同时存在.
  • 后续每个来操作 ConcurrentHashMap 的线程, 都会参与搬家的过程. 每个操作负责搬运一小部分元素.
  • 搬完最后一个元素再把老数组删掉.
  • 这个期间, 插入只往新数组加.
  • 这个期间, 查找需要同时查新数组和老数组

 二、ConcurrentHashMap和Hashtable、HashMap 的区别

  • HashMap: 线程不安全。key 允许为 null
  • Hashtable: 线程安全。使用 synchronized 锁 Hashtable 对象,效率较低。key 不允许为 null。
  • ConcurrentHashMap: 线程安全。使用 synchronized 锁每个链表头结点,锁冲突概率低,充分利用了CAS 机制。同时优化了扩容方式。key 不允许为 null。

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

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

相关文章

Mysql中explain执行计划信息中字段详解

Mysql中explain执行计划信息中字段详解 1. 获取执行计划2. 字段含义2.1 id2.2 select_type2.3 table2.4 partitions2.5 type2.6 possible_keys2.7 key2.8 ley_len2.9 ref2.10 rows2.11 extra 1. 获取执行计划 explain select * from t1; --或 desc select * from t1;2. 字段含…

Pandas数据分析教程-数据清洗-扩展数据类型

pandas-02-数据清洗&预处理 扩展数据类型1. 传统数据类型缺点2. 扩展的数据类型3. 如何转换类型文中用S代指Series,用Df代指DataFrame 数据清洗是处理大型复杂情况数据必不可少的步骤,这里总结一些数据清洗的常用方法:包括缺失值、重复值、异常值处理,数据类型统计,分…

23款奔驰GLE450轿跑升级原厂外观暗夜套件,战斗感满满的

升级的方案基本都是替换原来车身部位的镀铬件,可能会有人问:“难道直接用改色膜贴黑不好吗?”如果是贴膜的话,第一个是颜色没有那么纯正,这些镀铬件贴黑的技术难度先抛开不说,即使贴上去了,那过…

Mac电脑系统应该用什么软件进行优化清理?

作为一枚资深的Windows系统使用者,小编刚刚转向Mac系统的怀抱时,各种不适应,Windows系统中普遍使用的360清理软件目前暂时没有Mac版本的,这就让小编很是头疼了,大家的Mac都是用的什么清理软件呢? 经过一番…

Notion团队协作魔法:如何玩转数字工作空间?

Notion简介 Notion已经成为现代团队协作的首选工具之一。它不仅仅是一个笔记应用,更是一个强大的团队协作平台,能够满足多种工作场景的需求。 Notion的核心功能 Notion提供了丰富的功能,如文档、数据库、看板、日历等,满足团队的…

USB接口发展历程大全

1996年,由英特尔、微软、ibm等多家公司联合设计的usb标准问世,键盘、鼠标、智能手机以及打印机等等大多使用usb标准来实现供电和数据传输。 usb接口从诞生之初就是为了实现通用这个目的。在usb诞生之前,键盘、鼠标多使用ps二接口&#xff0c…

Doris异常处理

1、decimal 字段异常 修改为 2、连接超时 Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure The last packet successfully received from the server was 1,068 milliseconds ago. The last packet sent successfully to the ser…

kali开启SSH服务(简单无比)

1.切换到管理员用户: su root 提示输入root密码 2.启动SSH服务 命令为: /etc/init.d/ssh start 或者 systemctl start ssh 3.查看SSH服务状态是否正常运行,命令为: /etc/init.d/ssh status 图片仅供参考:

一文了解BFD技术:实现故障快速检测!

一、概诉 BFD提供了一个通用的、标准化的、介质无关的、协议无关的快速故障检测机制,有以下两大优点: 1.对相邻转发引擎之间的通道提供轻负荷、快速故障检测。 2.用单一的机制对任何介质、任何协议层进行实时检测。 BFD是一个简单的“Hello”协议。两个…

如何开发一款实景无人智能自动直播平台?抖音

随着科技的迅速发展和互联网的普及,实景无人智能直播平台逐渐成为了各行各业的热门应用。通过结合无人机、人工智能和直播技术,景无人智能直播平台为用户提供了全新的观看和体验方式。本文将深入探讨实景无人智能直播平台的搭建流程,剖析其中…

ASEMI-APT80DQ40BG二极管快速恢复特性及应用

编辑-Z 本文主要介绍了APT80DQ40BG二极管的快速恢复特性以及应用。首先,对该二极管的结构和工作原理进行了简要介绍。接着,详细阐述了其快速恢复特性及其在电源、逆变器和电动汽车等领域的应用。最后,对APT80DQ40BG二极管的优点和未来发展进…

element-ui里el-table表格操作列多横线怎么解决

错误展示 错误原因 在vue中封装了element-ui表格,然后使用插槽,fixed定位等,导致样式出现了错乱 解决方案 1、线没有对齐 /* Element-UI 的table 组件出现表格线条不对齐的问题 */ body .el-table th.gutter {display: table-cell !impor…

基于ROS2的消除重力加速度对IMU加速度影响,动态获取当前重力加速度。

消除重力加速度的影响 受力分析: IMU静止时,与IMU所在平面会有一个向上的支持力(重力反作用力),IMU就会测量的角速度就是反作用力带来的。坐标关系:IMU在平面或者斜坡,IMU的Z轴都或多或少与重力有一个夹角&#xff0c…

你真的懂分数吗?(一)——分数的数学结构和建模

早点关注我,精彩不错过! 我们小学就学过分数,是指的形如“a / b”的,表达把某对象平均分成b份中的a份那么多的含义的数。自然地,a, b一般都是整数,b ! 0;如果a,b仍然是分数的话&…

【UE】蓝图通信——事件分发器

目标 比如我现在希望点击控件蓝图A中的按钮后,蓝图B能够马上做出响应 实现步骤 1. 这里控件蓝图A叫“UI_按钮”,我在该蓝图中创建了一个名为“btnIsClicked”的事件分发器 当按钮被点击时,就会调用“btnIsClicked” 2. 蓝图B这里叫做“BP_…

Leetcode 剑指 Offer II 041. 滑动窗口的平均值

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定一个整数数据流和一个窗口大小,根据该滑动窗口的…

Postman —— postman实现参数化

什么时候会用到参数化 比如:一个模块要用多组不同数据进行测试 验证业务的正确性 Login模块:正确的用户名,密码 成功;错误的用户名,正确的密码 失败 postman实现参数化 在实际的接口测试中,部分参数每…

【Luniux】解决Ubuntu外接显示器不显示的问题

Luniux】解决Ubuntu外接显示器不显示的问题 文章目录 Luniux】解决Ubuntu外接显示器不显示的问题1. 检查nvidia显卡驱动是否正常2. 更新驱动3. 检查显示器是否能检测到Reference 1. 检查nvidia显卡驱动是否正常 使用命令行 nvidia-smi来检查显卡驱动是否正常,如果…

【ArcGIS微课1000例】0074:ArcGIS热点分析(Getis-Ord Gi*)---犯罪率热点图

严重声明:本文来自专栏《ArcGIS微课1000例:从点滴到精通》,为CSDN博客专家刘一哥GIS原创,原文及专栏地址为:(https://blog.csdn.net/lucky51222/category_11121281.html),谢绝转载或爬取!!! 文章目录 一、热点分析工具介绍二、ArcGIS热点分析案例1. 普通热点分析2. 加…

运维高级学习--Kubernetes(K8s 1.28.x)部署

一、基础环境配置(所有主机操作) 主机名规划 序号 主机ip 主机名规划1 192.168.1.30 kubernetes-master.openlab.cn kubernetes-master2 192.168.1.31 kubernetes-node1.openlab.cn kubernetes-node13 192.168.1.32 kubernetes-node2…