Java并发HashMap报错ConcurrentModificationException解决方案
HashMap
HashMap是散列表存储,采用key-value键值对存储数据,其中k用hash散列函数找到存储位置,为的就是减少查找比较次数,特点: 无序,key不可重复,key可以为null,value可重复,线程不安全.JDK1.7底层是采用数组+链表,hash碰撞后采用拉链法来解决碰撞问题.JDK1.8底层采用数组+链表+红黑树,链表长度大于等于8且容量大于等于64就会树化,否则会反树化.
案例代码
public class HashMapConcurrentDemo {public static void main(String[] args) {Map<String,String> list = new HashMap<>();for (int i = 0; i < 30; i++) {new Thread(()->{list.put(Thread.currentThread().getName(),UUID.randomUUID().toString().substring(0,8));System.out.println(list);},"t"+i).start();}}
}
导致原因
高并发情况下,多个线程竞争put操作
解决方案
- Collections.synchronizedMap
底层是采用synchronized同步代码块,包装了最外层的put方法,让其线程安全,其实真正的put操作还是HashMap自己来实现.
- ConcurrentHashMap
底层是采用分段锁来保证线程安全,其中有CAS乐观锁,和synchronized同步代码块来保证线程安全
Java并发HashMap报错ConcurrentModificationException解决方案相关推荐
- Java并发HashSet报错ConcurrentModificationException解决方案
HashSet HashSet特点: 元素不可重复,无序,线程不安全,底层是HashMap实现,HashMap的key是唯一不可重复的,value则是用的一个Object对象"占位" ...
- Intellij IDEA 导入或运行流式处理框架storm以及java.lang.NoClassDefFoundError报错的解决方案
网上有很多使用eclipse编辑storm的,但是我觉得eclipse界面不太友好,于是毅然使用intellij IDEA来编辑 但是直接无脑导入会有各种各样奇葩的报错,于是我在解决了问题之后与大家分 ...
- java todataurl_canvas.toDataURL()报错的解决方案全都在这了
报错详尽信息 Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases ...
- 关于java导出Excel报错65535的解决方案
关于java导出Excel报错65535的解决方案 java.lang.IllegalArgumentException: Invalid row number (65536) outside all ...
- 微信表情符号 mysql_Emoji表情符号入MySQL数据库报错的解决方案
Emoji表情符号入MySQL数据库报错的解决方案 发布时间:2020-08-15 08:21:52 来源:ITPUB博客 阅读:136 作者:bestpaydata auther:Jane.Hoo ...
- java连接OPC 报错汇总
java连接OPC 报错汇总 最近在弄utgard连接opc服务器 状态码 原因 解决方案 80070005: Unknown error (80070005) 账号没有权限 服务器在win10下 没 ...
- Java IDEA pom 报错java.lang.OutOfMemoryError: GC overhead limit exceeded 基本所有依赖都报错(除了JDK自带String等)解决详
@Java IDEA pom 报错java.lang.OutOfMemoryError: GC overhead limit exceeded 基本所有依赖都报错(除了JDK自带String等)解决详 ...
- Navicat链接数据库报错1130解决方案
Navicat链接数据库报错1130解决方案 参考文章: (1)Navicat链接数据库报错1130解决方案 (2)https://www.cnblogs.com/newAndHui/p/113451 ...
- vue 打包后访问接口报错404 解决方案 (前提是在vue里使用了代理)
vue 打包后访问接口报错404 解决方案 (前提是在vue里使用了代理) 参考文章: (1)vue 打包后访问接口报错404 解决方案 (前提是在vue里使用了代理) (2)https://www. ...
最新文章
- MYSQL查看 table 表状态常用的命令
- wxWidgets:wxWindowUpdateLocker类用法
- 单列设计模式 懒汉式及多线程debug
- USENIX 最佳论文奖:擦除 Windows Azure 存储编码
- IntelliJ IDEA forMac 如何生成项目的javadoc(API文档)
- C++ 关于复制、移动构造函数和移动、复制 赋值运算符的重载问题;
- rust怎么调整夜晚亮度_买手机时LCD屏和OLED屏怎么选?终于明白了!
- python发微信工资条_帮公司财务妹子写了个“群发工资条”的Python脚本!
- 经典仿句100例_(完整版)精美句子仿写100例
- 给DW2XLS源代码增加了同时导出多个dw的代码(合并多个dw)
- 计算机主板的1117标识,AMS1117封装尺寸图_AMS1117引脚图及功能
- dell perch330_使用Perch CMS构建快速,可扩展的网站
- 纵观 ActiveX 平台的兴衰史,看开发控件的技术演变
- 五种方法教你预防ddos攻击
- Meta 用算法“随机”解雇 60 人;印度的“网络霸凌”最严重;越南要求外国公司数据存储本地化| 每日大事件...
- mysql 5.7.24-winx64_mysql-5.7.24-winx64下载与安装
- Android Dialog
- SCCB协议介绍与应用和OV7670摄像头的寄存器配置
- CNN Matlab例子RGB_MATLAB如何提取曲线原始数据
- 代理服务器介绍及种类划分