美文网首页
深入理解java集合框架(java.util.Concurren

深入理解java集合框架(java.util.Concurren

作者: Aolus | 来源:发表于2017-08-18 14:37 被阅读0次

异常产生

当我们迭代一个ArrayList或者HashMap或者set时,如果尝试对集合做一些修改操作(例如删除元素(大多数为删除)新增),可能会抛出java.util.ConcurrentModificationException的异常。

以上这段简单的代码,在很多人看来不应该有问题,为什么会出异常呢,也许很多人想不通,下面我来具体解释下:

异常原因

ArrayList的父类AbstarctList中有一个域modCount,每次对集合进行修改(增添元素,删除元素……)时都会modCount++

而foreach的背后实现原理其实就是Iterator(关于Iterator可以看Java Design Pattern: Iterator),等同于注释部分代码。在这里,迭代ArrayList的Iterator中有一个变量expectedModCount,该变量会初始化和modCount相等,但如果接下来如果集合进行修改modCount改变,就会造成expectedModCount!=modCount,此时就会抛出java.util.ConcurrentModificationException异常

过程如下图:

分析jdk源码得知如下:

异常是这个方法抛出的,在获取元素的时候,默认会去检查modCount和expectModCount 是否相等不等抛出异常

解决办法:

使用iterator 进行遍历,以及相关删除,增加操作

相关文章

  • 深入理解java集合框架(java.util.Concurren

    异常产生 当我们迭代一个ArrayList或者HashMap或者set时,如果尝试对集合做一些修改操作(例如删除元...

  • 2018-07-16

    Java 阅读 大白话说Java泛型 深入理解Java集合框架 java构造代码块详解 Java中Overload...

  • 「 深入浅出 」java集合Collection和Map

    本系列文章主要对java集合的框架进行一个深入浅出的介绍,使大家对java集合有个深入的理解。本篇文章主要具体介绍...

  • Java 集合框架_开篇

    Java 集合框架系列 Java 集合框架_开篇Java 集合框架_ListJava 集合框架_ArrayList...

  • Java 集合框架_List

    Java 集合框架系列 Java 集合框架_开篇Java 集合框架_ListJava 集合框架_ArrayList...

  • Spring Boot系列(一):Spring Boot 入门篇

    不知道大家对上次的《深入理解Java集合框架》系列文章(已全部更新完毕)有没有好好研究呢?对于学习Java的童鞋来...

  • Java集合框架

    Java集合框架 (例如基本的数据结构)里包含了最常见的Java常见面试问题。很好地理解集合框架,可以帮助你理解和...

  • Java集合框架面试问题集锦

    Java集合框架(例如基本的数据结构)里包含了最常见的Java常见面试问题。很好地理解集合框架,可以帮助你理解和利...

  • 【集合框架】

    集合框架(怎么实现、适用场景) hash相关 Java集合框架 Java集合框架综述Java集合框架面试问题集锦 ...

  • Java 学习资料整理

    集合框架部分 Java 集合源码解析系列个人感觉这个博主对Java 集合部分的源码进行了深入阅读,可以参考 Jav...

网友评论

      本文标题:深入理解java集合框架(java.util.Concurren

      本文链接:https://www.haomeiwen.com/subject/dikarxtx.html