java.util.ConcurrentModificationException 解决方法
java.util.ConcurrentModificationException 解决方法
在使用iterator.hasNext()操作迭代器的时候,如果此时迭代的对象发生改变,比如插入了新数据,或者有数据被删除。
则使用会报以下异常:
Java.util.ConcurrentModificationException at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793) at java.util.HashMap$KeyIterator.next(HashMap.java:828)
例如以下程序(转自互联网):
mport java.util.*; public class Main { public static void main(String args[]) { Main main = new Main(); main.test(); } public void test() { Map bb = new HashMap(); bb.put("1", "wj"); bb.put("2", "ry"); Iterator it = bb.keySet().iterator(); while(it.hasNext()) { Object ele = it.next(); bb.remove(ele); //wrong } System.out.println("Success!"); } }
原因:Iterator做遍历的时候,HashMap被修改(bb.remove(ele), size-1),Iterator(Object ele=it.next())会检查HashMap的size,size发生变化,抛出错误ConcurrentModificationException。
解决办法:
1) 通过Iterator修改Hashtable
while(it.hasNext()) { Object ele = it.next(); it.remove(); }
2) 根据实际程序,您自己手动给Iterator遍历的那段程序加锁,给修改HashMap的那段程序加锁。
3) 使用“ConcurrentHashMap”替换HashMap,ConcurrentHashMap会自己检查修改操作,对其加锁,也可针对插入操作。
import java.util.concurrent.*;
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
相关推荐
-
实例解析Java日期格式工具类DateUtil.java
话不多说,请看代码: DateUtil.java package pers.kangxu.datautils.utils; import java.text.SimpleDateFormat; import java.util.Date; import pers.kangxu.datautils.common.exception.DefineException; /** * * <b> * 处理日期 工具类 * </b> * @author kangxu * */ public c
-
java.util.Date与java.sql.Date的区别
我数据库里用到了日期类型.用java编程的时候同时import了java.util.*和java.sql.*,发现直接申明Date类型 Date dt; 会报错,查了一下才发现有java.util.Date和java.sql.Date,在定义日期类型的时候要使用全名,就是像这样: java.util.Date udt; java.sql.Date sdt; 然后我就查java.util.Date和java.sql.Date的区别和用法,这方面网上资料挺全,我就不赘述了,大致区别就是java.ut
-
出现java.util.ConcurrentModificationException 问题及解决办法
java.util.ConcurrentModificationException 解决办法 前言: 在使用iterator.hasNext()操作迭代器的时候,如果此时迭代的对象发生改变,比如插入了新数据,或者有数据被删除. 则使用会报以下异常: Java.util.ConcurrentModificationException at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793) at java.util.HashMap$
-
在JSTL EL中处理java.util.Map,及嵌套List的情况
在方括号中指定键,并将相应的值作为表达式的值返回.例如,表达式 ${map['key']} 返回与 map标识符所引用的 Map 中的 "key" 键相关联的值. 当forEach 的items属性中的表达式的值是java.util.Map时,则var中命名的变量的类型就是 java.util.Map.Entry.这时var=entry的话,用表达式${entry.key}取得键名. 用表达${entry.value}得到每个entry的值.这是因为java.util.Map.Entr
-
java.util.ArrayDeque类使用方法详解
本文为大家介绍了java.util.ArrayDeque类使用方法,供大家参考,具体内容如下 1. ArrayDeque有两个类属性,head和tail,两个指针. 2. ArrayDeque通过一个数组作为载体,其中的数组元素在add等方法执行时不移动,发生变化的只是head和tail指针,而且指针是循环变化,数组容量不限制. 3. offer方法和add方法都是通过其中的addLast方法实现,每添加一个元素,就把元素加到数组的尾部,此时,head指针没有变化,而tail指针加一,因为指针是
-
Java常用正则表达式验证工具类RegexUtils.java
正则表达式常常用来验证各种表单,Java 表单注册常用正则表达式验证工具类,常用正则表达式大集合. 1. 电话号码 2. 邮编 3. QQ 4. E-mail 5. 手机号码 6. URL 7. 是否为数字 8. 是否为中文 9. 身份证 10. 域名 11. IP .... 常用验证应有尽有! 这的确是您从事 web 开发,服务器端表单验证之良品!你,值得拥有 ^_^ /* * Copyright 2012-2013 The Haohui Network Corporation */ pack
-
Java中StringUtils工具类的一些用法实例
StringUtils 方法的操作对象是 java.lang.String 类型的对象,是 JDK 提供的 String 类型操作方法的补充,并且是 null 安全的(即如果输入参数 String 为 null 则不会抛出 NullPointerException ,而是做了相应处理,例如,如果输入为 null 则返回也是 null 等,具体可以查看源代码). 除了构造器,StringUtils 中一共有130多个方法,并且都是 static 的,所以我们可以这样调用 StringUtils.x
-
浅谈java中Math.random()与java.util.random()的区别
今天突然想起来,java产生随机数的问题,上机试了一下,找到了一点区别,在这里总结一下: 直接调用Math.random()是产生一个[0,1)之间的随机数, 如果用 java.util.Random random=new Random();random.nextInt() 这样产生一个长整型的随机数并且与上一次是一样的,如果过一会再产生就不会一样了,例如: for (int i = 0; i < 10; i++) { Random random=new Random(); Thread.sle
-
java.util.concurrent.ExecutionException 问题解决方法
java.util.concurrent.ExecutionException错误信息,这里给出解决方案,大家根据具体要求更改. SEVERE: A child container failed during start java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].Standa
-
简析Java中的util.concurrent.Future接口
在一个单线程应用中,当你调用一个方法只有计算结束才会返回结果( IOUtils.toString() comes from Apache Commons IO ): public String downloadContents(URL url) throws IOException { try(InputStream input = url.openStream()) { return IOUtils.toString(input, StandardCharsets.UTF_8); } } /
-
深入Synchronized和java.util.concurrent.locks.Lock的区别详解
主要相同点:Lock能完成Synchronized所实现的所有功能.主要不同点:Lock有比Synchronized更精确的线程予以和更好的性能.Synchronized会自动释放锁,但是Lock一定要求程序员手工释放,并且必须在finally从句中释放.synchronized 修饰方法时 表示同一个对象在不同的线程中 表现为同步队列如果实例化不同的对象 那么synchronized就不会出现同步效果了.1.对象的锁 所有对象都自动含有单一的锁. JVM负责跟踪对象被加锁的次数.如果一个对象被
随机推荐
- php实现贪吃蛇小游戏
- Go语言入门教程之Arrays、Slices、Maps、Range操作简明总结
- Three.js学习之Lamber材质和Phong材质
- Perl脚本实现检测主机心跳信号功能
- Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#<Object>‘的解决方法
- JavaScript使用RegExp进行正则匹配的方法
- 列出指定目录下的所有文件和目录
- Android 线程thread的两种实现方法(必看)
- Vue.js快速入门实例教程
- Tomcat安全设置 win2003 下tomcat权限限制
- Android编程实现的微信支付功能详解【附Demo源码下载】
- JavaScript中模拟实现jsonp
- C# List<T>的用法小结
- linux下C/C++学生信息管理系统
- iOS使用AVFoundation展示视频
- ubuntu16.04制作vim和python3的开发环境
- 详解vue文件中使用echarts.js的两种方式
- angularjs下ng-repeat点击元素改变样式的实现方法
- python使用opencv对图像mask处理的方法
- Spring Boot配置Thymeleaf(gradle)的简单使用
其他
- python turtle库 计时器
- vue的生命周期有哪些
- librosa与matlab中mel差别
- cookie 24小时
- vue 移动端左右切换动画
- zepto 滚动 元素是否可见
- sql2000自动安装工具1.1
- C# linux设置开机自启动
- mysql 记录丢失
- association多重嵌套
- querywrapper根据时间排序
- element-ui 表格列显示
- ip2region获取地理位置
- uniapp 显示部分数据 下拉刷新
- go redis pipeline 返回值怎么处理
- C 与php加密一致的一种算法
- 引用dapper框架
- vue 输入框远程搜索
- pyqt 批量给控件设置字体
- centos 安装openstack 配置网络