Java并发HashSet报错ConcurrentModificationException解决方案
HashSet
HashSet特点: 元素不可重复,无序,线程不安全,底层是HashMap实现,HashMap的key是唯一不可重复的,value则是用的一个Object对象"占位",主要是key用来存取数据.
案例代码
public class HashSetConcurrentDemo {public static void main(String[] args) {Set<String> list = new HashSet();for (int i = 0; i < 30; i++) {new Thread(()->{list.add(UUID.randomUUID().toString().substring(0,8));System.out.println(list);},"t"+i).start();}}
}
导致原因
高并发情况下,多个线程调用add方法产生的错误.
解决方案
- Collections.synchronizedSet(new HashSet<>())集合工具类
底层是同步代码块synchronized来保证线程安全,其实就是把HashSet方法加了同步代码块,底层操作还是细节没变,就是包装了一层,加上了synchronized修饰保证线程安全
关键代码
- CopyOnWriteArraySet
CopyOnWriteArraySet其实底层是CopyOnWriteArrayList,也是采用ReentrantLock锁来保证线程安全.
每次添加元素都会遍历集合中元素是否存在,存在返回元素所在下标,如果下标大于-1则跳出方法返回false,否则执行添加元素的操作
Java并发HashSet报错ConcurrentModificationException解决方案相关推荐
- Java并发HashMap报错ConcurrentModificationException解决方案
HashMap HashMap是散列表存储,采用key-value键值对存储数据,其中k用hash散列函数找到存储位置,为的就是减少查找比较次数,特点: 无序,key不可重复,key可以为null,v ...
- 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. ...
最新文章
- 格式工厂mac版_格式工厂无广告版,支持PDF文件的转换
- 大北农集团被指控授意窃取商业秘密
- Rabbit的Windows安装
- PhotoshopCS6-视觉特效插画技法-15-磨砂金属效果分析
- rds数据加密_如何保障云上数据安全?一文详解云原生全链路加密
- 苹果电脑 Mac OS X 系统诞生的故事和发展历史
- android 线程太多,应用程序可能在其主线程上做了太多的工作。
- 清华又揽一位AI大牛!前微软全球副总裁开招博士生!
- SSH Iptables访问控制
- JAVA中获取工程路径的方法
- 自定义Flash背景的相关设置方法以及其与目录下的文件的对应关系
- 《DOOM启示录》读后感
- 关于海康相机ip地址无法更改问题
- 网站在线协作工具 onlyoffice在线协作
- 【2021年】百度搜索词获取,获取百度搜索的关键词
- ajax如何传递josn数据,jq之ajax以及json数据传递
- 用户登录.html_河南省中小学教师继续教育管理系统登录入口http://47.92.44.63:89/
- 暴力破解之验证码绕过
- “墨子号”量子科学实验卫星成果获克利夫兰奖
- linux centos 命令行 安装 teamviewers ___yyw合并版
热门文章
- Win10多用户同时远程桌面的另类解决方案---支持1809和1909和2004版本V2.0
- windows debug tools
- addEventListener 的第三个参数capture、once、passive
- python的easygui属性错误_python - PythonAnywhere:尝试使用easygui模块时出现Tkinter.py错误 - 堆栈内存溢出...
- 关于中国新能源发展最近趋势的深度分析!政府和科技巨头抓住了历史拐点
- 深度学习图像标注软件LabelMe使用方法
- 计算机教育杂志有核心期刊吗,计算机教育杂志是核心期刊吗?
- python1到100奇数相加_Python:从inpu将奇数相加
- 什么是触发器,MySQL都有哪些触发器?
- Hadoop(三)通过C#/python实现Hadoop MapReduce