ConcurrentModificationException的

时间:2011-07-22 13:40:13

标签: java exception collections concurrentmodification

使用下面的代码片段,尝试处理电子表格,需要排除ad hoc列。我知道我正在做的原始方式,将异常放在ArrayList中并处理每个列表中的列表并且在当前行列上的增量是反常的,但是你知道只是完成它。

但是我得到了标题错误,我认为永远不会发生错误。我只是循环遍历ArrayList并进行比较,而不是修改任何内容。错误在哪里?有没有更好的方法来处理例外列表?

ArrayList noProcess = new ArrayList();
Iterator itr00 = noProcess.iterator();
Iterator itr01 = noProcess.iterator();
noProcess.add(new Integer("5"));
noProcess.add(new Integer("18"));
....
 boolean include=true;
  for(int i=0;i<archive.length;i++){
    for (int j = 0; j < archive[i].length; j++) {
      while (itr00.hasNext()) {
        if (j == ( (Integer) itr00.next()).intValue())
          include = false;
      }
      if (include) {...

4 个答案:

答案 0 :(得分:4)

一旦你在它上面创建了一个迭代器(除了通过迭代器),你就无法改变Iterable的内容,否则你只要移动迭代器就会得到一个ConcurrentModificationException - 你创建了一个迭代器,然后执行noProcess.add(new Integer("5"));,然后再推进迭代器。

另外,你创建了两个迭代器 - 你也不应该这样做 - 这太疯狂了。

答案 1 :(得分:1)

来自JavaDoc

  

ConcurrentModificationException:此例外可能是   由检测到并发修改的方法引发的   当不允许这样的修改时的对象。

E.g 一个线程修改一个集合而另一个线程正在迭代它时,通常不允许这样做。

答案 2 :(得分:1)

来自Java Docs:

  

此类的迭代器和listIterator返回的迭代器   方法是快速失败的:如果列表在结构上被修改了   创建迭代器之后的时间,除了通过之外的任何方式   迭代器自己删除或添加方法,迭代器会抛出一个   ConcurrentModificationException的。因此,面对并发   修改,迭代器快速而干净地失败,而不是   在不确定的时间冒着任意的,非确定性的行为   在将来。

使用迭代器的add方法将元素添加到List

答案 3 :(得分:0)

在获取迭代器后在列表中添加记录,请更正..它应该可以正常工作。