如何处理ConcurrentModificationException

关于这个BUG分两种情况,一种情况是单线程,一种情况是多线程。

单线程

单线程出现这种事情就应该拖出去枪毙五分钟还不带同情的,作为程序员,有点常识的都知道在遍历集合的同时不能同时删除集合元素,如下面代码所示,必然产生这样的崩溃:


同样的,如下的代码也会产生崩溃:


解决办法如下:就是定义一个数组去接收要删除的元素,在外面一起remove掉,代码就不贴了。。。。。。

PS:大家仔细试试就会发现,崩溃的例子中遍历删除其实是用的迭代器,只要是迭代删除就必挂,比如foreach之类的,如果用普通for循环虽然不会挂,结果也达不到预期效果

多线程

多线程环境产生这个异常原因就是,多个线程在删除同一个集合中的元素,比如线程一在遍历,线程二在插入操作,线程三在进行删除操作,都在操作同一个集合的元素,就会产生ConcurrentModificationException异常


异常日志跟单线程的时候也差不多,就不截图了,也是报ConcurrentModificationException崩溃,解决办法呢,就是集合换成线程安全的,比如CopyOnWriteArrayList,这里大家可以多多关注concurrent包里的api,里面的api在处理多线程环境的时候很有用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java-Review-Note——4.多线程 标签: JavaStudy PS:本来是分开三篇的,后来想想还是整...
    coder_pig阅读 1,682评论 2 17
  • 传送门 解读阿里Java开发手册(v1.1.1) - 异常日志 前言 阿里Java开发手册谈不上圣经,但确实是大量...
    kelgon阅读 4,385评论 4 50
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,523评论 25 708
  • 近来中国一部短篇科幻小说《北京折叠》获得美国科幻文学雨果奖,讲的是庞大的城市被分成三层空间,而其中第三空间5000...
    时间与区间阅读 173评论 0 1
  • 经验, experience,似乎近来被N多人重视,简直是重如泰山。 一个学生要找工作,至少要被要求有一年以上工作...
    明哥明说阅读 413评论 0 0