`
chenk008
  • 浏览: 25838 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ConcurrentModificationException主要原因及处理方法

 
阅读更多
当使用 fail-fast iterator 对 Collection 或 Map 进行迭代操作过程中尝试直接修改 Collection / Map 的内容时,即使是在单线程下运行,   java.util.ConcurrentModificationException 异常也将被抛出。

   Iterator 被创建之后会保存原来容器的modCount,当原来的对象数量发生变化时,Iterator的保存的modCount不会同步改变,当执行Iterator任务操作之前都会执行checkForComodification方法,校验原来容器的modCount和保存的modCount,如果对不上这抛出ConcurrentModificationException。

  所以 Iterator 在工作的时候是不允许被迭代的对象被改变的。但你可以使用 Iterator 本身的方法 remove() 来删除对象, Iterator.remove() 方法会在删除当前迭代对象的同时维护索引的一致性。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics