your name.jpg

关键字: Java Exception

不知读者在Java开发的过程中有没有遇到类似的异常信息 Exception in thread "main" java.util.ConcurrentModificationException, 下面小编简单介绍异常原因以及这种异常的改进方法,内容很简单,有什么问题还望指正。

假设我们要实现这样一个例子: 判断集合里面有没有"world"这个元素,如果有,就添加一个"javaee"元素

出现异常的代码如下:

import java.util.ArrayList;

import java.util.Iterator;

public class Test {

public static void main(String[] args) {

ArrayList array = new ArrayList();

// 创建并添加元素

array.add("hello");

array.add("world");

array.add("java");

Iterator it = array.iterator();

while (it.hasNext()) {

String s = (String) it.next();

if ("world".equals(s)) {

array.add("javaee");

}

}

}

}

1.异常解释

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

产生的原因:

迭代器是依赖于集合而存在的,在判断成功后,集合的中新添加了元素,而迭代器却不知道,所以就报错了,这个错叫并发修改异常。

简单描述就是:迭代器遍历元素的时候,通过集合是不能修改元素的。

如何解决呢?

A:迭代器迭代元素,迭代器修改元素

B:集合遍历元素,集合修改元素(普通for)

2.下面用两种方法去解决这个异常

import java.util.ArrayList;

public class Test {

public static void main(String[] args) {

ArrayList array = new ArrayList();

// 创建并添加元素

array.add("hello");

array.add("world");

array.add("java");

// 方式1:迭代器迭代元素,迭代器修改元素

// 而Iterator迭代器却没有添加功能,所以我们使用其子接口ListIterator

// ListIterator lit = array.listIterator();

// while (lit.hasNext()) {

// String s = (String) lit.next();

// if ("world".equals(s)) {

// lit.add("javaee");

// }

// }

// System.out.println("list1:" + array);

// 方式2:集合遍历元素,集合修改元素(普通for)

for (int x = 0; x < array.size(); x++) {

String s = (String) array.get(x);

if ("world".equals(s)) {

array.add("javaee");

}

}

System.out.println("list2:" + array);

// 方式3:增强for循环

// 增强for循环写的话会报同样的错误,因为它本身就是用来替代迭代器的

// for (String s : array) {

// if ("world".equals(s)) {

// array.add("javaee");

// }

// }

// System.out.println("list3:" + array);

}

}

java 并发修改_理解和解决Java并发修改异常ConcurrentModificationException相关推荐

  1. 理解和解决Java并发修改异常ConcurrentModificationException(转载)

    原文地址:https://www.jianshu.com/p/f3f6b12330c1 理解和解决Java并发修改异常ConcurrentModificationException 不知读者在Java ...

  2. eclipse 收缩 选择行_一文解决Java初学者的选择难题

    很多Java初学者在刚开始会被一些诸如环境搭建.软件构建等问题所迷惑,本文将给出答案,帮助初学者找到正确答案,快速上手Java开发. Java Logo 全文答案 Java的版本: Java8 开发环 ...

  3. Java内存泄露的理解与解决

    Java内存管理机制 在C++语言中,如果需要动态分配一块内存,程序员需要负责这块内存的整个生命周期.从申请分配.到使用.再到最后的释放.这样的过程非常灵活,但是却十分繁琐,程序员很容易由于疏忽而忘记 ...

  4. java class修改_【原创】Java基础之简单修改jar包中的class

    有时需要修改很多jar(假设这些jar都位于lib目录)中其中一个jar中的某一个类,而且又没有原始代码或ide,这时最简单的方式是: 1 进入lib目录 #cd lib#ls test.jar de ...

  5. Java异常捕获论文_一篇文章解决Java异常处理

    前言 与异常相关的内容其实很早就想写了,但由于各种原因(懒)拖到了现在.在大二开学前夜(今天是8.31)完成这篇博客,也算完成了暑期生活的一个小心愿. 以下内容大多总结自<Java核心技术 卷Ⅰ ...

  6. java六个必须理解的问题+java学习方法

    对于这个系列里的问题,每个学Java的人都应该搞懂.当然,如果只是学Java玩玩就无所谓了.如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列.内容均来自于CSDN的经典老贴. ...

  7. java python算法_用Python,Java和C ++示例解释的排序算法

    java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...

  8. 做Java头发少_这35个Java代码优化细节,你用了吗

    链接:https://www.jianshu.com/p/6e472304b5ac 前言 代码 优化 ,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有 ...

  9. java future用法_纯干货:Java学习过程中的21个知识点和技术点

    我们在Java学习过程中要学会抓重点,善于总结,Java学习过程中常见的21个知识点和技术点你知道吗?下面和千锋广州小编一起来看看吧! 1. JVM相关 对于刚刚接触Java的人来说,JVM相关的知识 ...

最新文章

  1. python使用imbalanced-learn的RepeatedEditedNearestNeighbours方法进行下采样处理数据不平衡问题
  2. 医学+数据科学,必将大有可为 | 清华生物医学影像研究中心赵锡海
  3. Django中html里的分页显示
  4. SQL Server数据库查询速度慢的原因和解决方法
  5. 地摊经济和夜经济-国情讲坛·周荣江:城市生态谋定治理转型
  6. spring boot整合mybatis+通用mapper+pagehelper分页插件
  7. windows7+tomcat7+nginx1.11.3 +memcached
  8. 什么是计算机应用上机报告,计算机应用实验报告样本.doc
  9. easyui源码翻译1.32--Window(窗口)
  10. C#中的Json的序列化和反序列化
  11. 华泰证券高薪诚聘 技术大牛/运维平台架构师
  12. SQLServer 2000个人版下载
  13. HDU 4093 Xavier is Learning to Count FFT + 容斥原理 2011年上海现场赛C题
  14. 树莓派4b自带wifi_树莓派raspberry4B入坑指南 part-11 在命令行中设置wifi
  15. 数据分析师工作的一点点感悟
  16. 教你一招,解决C盘空间不足问题
  17. matlab ode45的使用
  18. 位图字体生成工具 BMFont汉化版
  19. 一个计算机专业学生几年的Java编程经验汇总
  20. android一键清理任务,Android 一键清理、内存清理功能实现

热门文章

  1. iOS项目之交换方法(runtime)
  2. 推荐:浏览器是怎样工作的?
  3. 12.委托是什么?委托的property声明用什么属性?为什么?
  4. 错误 SQL TOP子句中的行数必须是整数
  5. office在线编辑器
  6. 世界机器人大会特种机器人报到高难度的高危险的活让它们来!
  7. Linux下gcov和lcov代码覆盖率分析(C/C++覆盖率在NGINX测试中的应用)
  8. oracle判断侦听状态,oracle 监听状态为BLOCKED
  9. java对象比较 hashcode_Java Objects.hash()与自己实现的hashCode()比较
  10. jstat 内存泄漏_一次Java内存泄漏的排查!要了自己的老命!