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操作

解决方案

  1. Collections.synchronizedMap
    底层是采用synchronized同步代码块,包装了最外层的put方法,让其线程安全,其实真正的put操作还是HashMap自己来实现.

  2. ConcurrentHashMap
    底层是采用分段锁来保证线程安全,其中有CAS乐观锁,和synchronized同步代码块来保证线程安全

Java并发HashMap报错ConcurrentModificationException解决方案相关推荐

  1. Java并发HashSet报错ConcurrentModificationException解决方案

    HashSet HashSet特点: 元素不可重复,无序,线程不安全,底层是HashMap实现,HashMap的key是唯一不可重复的,value则是用的一个Object对象"占位" ...

  2. Intellij IDEA 导入或运行流式处理框架storm以及java.lang.NoClassDefFoundError报错的解决方案

    网上有很多使用eclipse编辑storm的,但是我觉得eclipse界面不太友好,于是毅然使用intellij IDEA来编辑 但是直接无脑导入会有各种各样奇葩的报错,于是我在解决了问题之后与大家分 ...

  3. java todataurl_canvas.toDataURL()报错的解决方案全都在这了

    报错详尽信息 Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases ...

  4. 关于java导出Excel报错65535的解决方案

    关于java导出Excel报错65535的解决方案 java.lang.IllegalArgumentException: Invalid row number (65536) outside all ...

  5. 微信表情符号 mysql_Emoji表情符号入MySQL数据库报错的解决方案

    Emoji表情符号入MySQL数据库报错的解决方案 发布时间:2020-08-15 08:21:52 来源:ITPUB博客 阅读:136 作者:bestpaydata auther:Jane.Hoo ...

  6. java连接OPC 报错汇总

    java连接OPC 报错汇总 最近在弄utgard连接opc服务器 状态码 原因 解决方案 80070005: Unknown error (80070005) 账号没有权限 服务器在win10下 没 ...

  7. Java IDEA pom 报错java.lang.OutOfMemoryError: GC overhead limit exceeded 基本所有依赖都报错(除了JDK自带String等)解决详

    @Java IDEA pom 报错java.lang.OutOfMemoryError: GC overhead limit exceeded 基本所有依赖都报错(除了JDK自带String等)解决详 ...

  8. Navicat链接数据库报错1130解决方案

    Navicat链接数据库报错1130解决方案 参考文章: (1)Navicat链接数据库报错1130解决方案 (2)https://www.cnblogs.com/newAndHui/p/113451 ...

  9. vue 打包后访问接口报错404 解决方案 (前提是在vue里使用了代理)

    vue 打包后访问接口报错404 解决方案 (前提是在vue里使用了代理) 参考文章: (1)vue 打包后访问接口报错404 解决方案 (前提是在vue里使用了代理) (2)https://www. ...

最新文章

  1. MYSQL查看 table 表状态常用的命令
  2. wxWidgets:wxWindowUpdateLocker类用法
  3. 单列设计模式 懒汉式及多线程debug
  4. USENIX 最佳论文奖:擦除 Windows Azure 存储编码
  5. IntelliJ IDEA forMac 如何生成项目的javadoc(API文档)
  6. C++ 关于复制、移动构造函数和移动、复制 赋值运算符的重载问题;
  7. rust怎么调整夜晚亮度_买手机时LCD屏和OLED屏怎么选?终于明白了!
  8. python发微信工资条_帮公司财务妹子写了个“群发工资条”的Python脚本!
  9. 经典仿句100例_(完整版)精美句子仿写100例
  10. 给DW2XLS源代码增加了同时导出多个dw的代码(合并多个dw)
  11. 计算机主板的1117标识,AMS1117封装尺寸图_AMS1117引脚图及功能
  12. dell perch330_使用Perch CMS构建快速,可扩展的网站
  13. 纵观 ActiveX 平台的兴衰史,看开发控件的技术演变
  14. 五种方法教你预防ddos攻击
  15. Meta 用算法“随机”解雇 60 人;印度的“网络霸凌”最严重;越南要求外国公司数据存储本地化| 每日大事件...
  16. mysql 5.7.24-winx64_mysql-5.7.24-winx64下载与安装
  17. Android Dialog
  18. SCCB协议介绍与应用和OV7670摄像头的寄存器配置
  19. CNN Matlab例子RGB_MATLAB如何提取曲线原始数据
  20. 代理服务器介绍及种类划分

热门文章

  1. 十大家用智能监控摄像头品牌排名
  2. 建模神器 | 涨知识,BIM渲染神技能
  3. 【数据结构】基础:二叉树
  4. CentOS各个版本支持周期
  5. k-means算法简介
  6. 数据分析-C端与B端数据分析的异同
  7. ViewPager及ViewPager
  8. 非常详细的 navigationController 的使用
  9. pixhawk 学习笔记
  10. day04,字典的操作