`
vakin.jiang
  • 浏览: 147566 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

List操作抛ConcurrentModificationException异常分析

阅读更多
for (String str : list) {
			list.remove(0);
		}


异常信息:
引用

Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449)
at java.util.AbstractList$Itr.next(AbstractList.java:420)
at com.jiang.TestApp.main(TestApp.java:18)



上次开发中遇到这个问题,贴出来分享一下。
原因:当执行remove后并没有通知for-each循环的的list,所以就会抛此异常信息。
分享到:
评论

相关推荐

    java并发容器CopyOnWriteArrayList实现原理及源码分析

    另外,CopyOnWriteArrayList由于其"读写分离"的思想,遍历和修改操作分别作用在不同的list容器,所以在使用迭代器进行遍历时候,不会抛出ConcurrentModificationException异常。 CopyOnWriteArrayList容器的缺点是...

    java集合类遍历的同时如何进行删除操作.docx

    这种方式是可行的,因为它没有在原始集合上进行操作,所以不会抛出异常。但是,这种方法实际上创建了一个新的集合副本,而不是修改原集合。 - **操作2**:使用增强的for-each循环遍历`list2`并尝试删除元素。这种...

    Java Collections中的Fail Fast机制

    **Fail Fast**机制是指当迭代器正在遍历集合的过程中,如果集合被修改,则会立即抛出`ConcurrentModificationException`异常。这里所说的“修改”指的是除了迭代器自身调用`remove()`方法外的任何改变集合状态的操作...

    Java常见异常集-Java,Hibernate,Tomcat异常

    10. **ConcurrentModificationException**:在多线程环境下,当一个线程正在修改集合,而另一个线程尝试迭代该集合时,会抛出此异常。应使用并发友好的集合类或同步控制来避免这个问题。 11. **ServletException: ...

    硬核ArrayList源码分析,答应我每天看一遍好么

    ”时,你可以回答:“由于ArrayList实现了fail-fast机制,如果在迭代过程中调用remove等修改集合结构的方法,会抛出`ConcurrentModificationException`异常。” 综上所述,理解ArrayList的源码不仅能够帮助我们更好...

    Java 多线程与并发(14-26)-JUC集合- CopyOnWriteArrayList详解.pdf

    迭代器的操作不会引发`ConcurrentModificationException`异常,但它不支持元素的更改操作(如`remove`、`set`和`add`),这些操作会抛出`UnsupportedOperationException`。 综上所述,`CopyOnWriteArrayList`是一种...

    Java实际开发中的小技巧汇总

    4. **集合操作**:在处理集合时,避免使用`for-each`循环中的`remove()`操作,这可能会导致ConcurrentModificationException。使用`Iterator`或者`List.removeIf()`方法来安全地移除元素。同时,了解并利用`Stream ...

    java.util介绍.pdf

    - **注意事项**:使用`Vector`创建的迭代器时,如果其他线程修改了`Vector`的状态(如添加或删除元素),则可能会抛出`ConcurrentModificationException`异常。 #### 七、`Stack`类 `Stack`继承自`Vector`,实现了...

    LinkedList.pdf

    在操作链表过程中,每次对链表进行结构性修改(例如添加或删除节点)时,modCount变量都会增加,这是为了在使用迭代器进行遍历时,迭代器可以快速检测到链表的修改,从而抛出ConcurrentModificationException异常。...

    阿里巴巴Java开发手册华山版.zip

    - **异常分类**:区分运行时异常和检查异常,合理抛出和捕获异常。 - **避免空指针异常**:推荐使用Optional类处理可能为null的对象,防止NullPointerException。 - **异常信息**:异常信息应具有足够的描述性,...

    关于方法iterator()找不着的问题~~~~~

    虽然在编译阶段可能没有问题,但在运行时,如果集合在迭代过程中被修改(添加、删除元素),可能会抛出`ConcurrentModificationException`。这是因为默认的迭代器不支持并发修改。为了安全地修改集合,可以使用`...

    阿里巴巴Java开发代码规约

    - 不要捕获并忽略异常,而应处理异常或向上抛出。 - 不要随便使用`Exception`作为捕获类型,应尽可能精确到具体异常。 - 使用`try-with-resources`语句处理需要关闭的资源。 5. **并发编程**: - 尽量避免使用`...

    互联网大厂Java高级工程师岗位面试真题154道

    安全失败(fail-safe)的集合如CopyOnWriteArrayList,即使在遍历过程中修改集合,也不会抛异常,而是返回修改前的状态。 4. HashMap的数据结构基于哈希表,由数组+链表/红黑树组成,用于快速查找元素。 5. ...

    阿里巴巴java开发手册2020

    - 避免使用`Exception`作为抛出的异常类型,应尽可能具体。 3. **设计模式与重构** - 推崇SOLID原则,即单一职责、开闭原则、里氏替换、接口隔离和依赖倒置。 - 使用工厂方法替代直接new操作,提高代码可扩展性...

    从原码解析ArrayList

    "快速失败"则会在检测到并发修改时立即抛出异常,防止后续操作错误。 通过以上分析,我们可以了解到ArrayList的核心特性以及在使用中的注意事项。理解这些原理对于优化代码性能和避免潜在问题至关重要。在实际开发...

    jdk源码阅读一:ArrayList

    如果在迭代过程中有其他线程修改了ArrayList的结构,则迭代器会抛出`ConcurrentModificationException`异常。这一机制有助于检测并发修改的问题,并提示开发者修复代码。 #### 七、结论 通过深入分析ArrayList的...

    迭代大师的修炼之道:Java中Iterator与增强for循环的深度解析

    - `Enhanced for loop`在遍历过程中不允许直接修改正在迭代的集合,否则会抛出`ConcurrentModificationException`异常。 - 当需要在遍历的同时修改集合时,应考虑使用`Iterator`或其他方法。 #### 四、进阶篇:...

    Java开发常见问题总结.docx

    - 在遍历集合时对其进行修改可能会导致`ConcurrentModificationException`异常。为了安全起见,在循环外部进行修改操作。 #### 四、异常处理 1. **合理捕获并处理异常** - 不应该忽视任何异常,而是应该适当地...

    Java面试八股文十万字总结.docx

    当多个线程同时访问一个集合时,如果一个线程修改了集合,而另一个线程正在进行迭代,则抛出`ConcurrentModificationException`异常。 **39. 说说Hashtable 与 HashMap 的区别** - **线程安全性**:`Hashtable`...

    【美团】Java 岗 154 道面试题1

    3. **快速失败 (fail-fast) 和安全失败 (fail-safe)**:快速失败是当集合在迭代过程中被修改时抛出`ConcurrentModificationException`;安全失败是指迭代器会返回旧的集合副本,允许在不抛异常的情况下修改集合。 4...

Global site tag (gtag.js) - Google Analytics