Exception in thread "AWT-EventQueue-0" 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));
}
posted @ 2022-01-02 22:05  夜月薇凉映银弩  阅读(294)  评论(0编辑  收藏  举报