zoukankan      html  css  js  c++  java
  • Exception in thread "AWTEventQueue0" java.util.ConcurrentModificationException

    当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。

    例如,某个线程在 Collection 上进行迭代时,通常不允许另一个线性修改该 Collection。通常在这些情况下,迭代的结果是不明确的。如果检测到这种行为,一些迭代器实现(包括 JRE 提供的所有通用 collection 实现)可能选择抛出此异常。执行该操作的迭代器称为快速失败 迭代器,因为迭代器很快就完全失败,而不会冒着在将来某个时间任意发生不确定行为的风险。

    注意,此异常不会始终指出对象已经由不同线程并发修改。如果单线程发出违反对象协定的方法调用序列,则该对象可能抛出此异常。例如,如果线程使用快速失败迭代器在 collection 上迭代时直接修改该 collection,则迭代器将抛出此异常。所以出现这种异常的通畅情况是使用了Iterator的原因,比如list。

    List<String> bullets = new ArrayList<>();
    for (String bullet : bullets) {
         System.out.println(bullet);
    }
    

    如果同时有其它线程对mm进行了修改,则抛出上面的异常。

    如果要避免这种错误,那么就不要使用Iterator,写成:

    List<String> bullets = new ArrayList<>();
    for (int i = 0; i < bullets.size();i++) {
         System.out.println(bullets.get(i));
    }
    
  • 相关阅读:
    「2019冬令营提高组」原样输出
    FJWC2019
    P2763 试题库问题
    P3979 遥远的国度
    P2754 [CTSC1999]家园
    P1251 餐巾计划问题
    P1382 楼房
    P1384 幸运数与排列
    P4294 [WC2008]游览计划
    P3345 [ZJOI2015]幻想乡战略游戏
  • 原文地址:https://www.cnblogs.com/yeyueweiliang/p/15758502.html
Copyright © 2011-2022 走看看