【问题标题】:ConcurrentmodificationException thrown by java codejava代码抛出的ConcurrentmodificationException
【发布时间】:2011-11-11 21:04:32
【问题描述】:

我正在尝试将列表的子列表附加到另一个列表。它在我调用 addAll() 以将 perm 列表元素附加到 outvec 的 while 循环中向我抛出并发修改异常。我需要减小 perm 对象中 p 列表的大小,然后将它的特定部分附加到 outvec。因此,这会不断重复直到 perm 对象的列表 p 中的元素数

import java.util.Collections;
import java.util.List;

public class Generate {

    //function to generate the output vector
    ListGenerator gen(ListGenerator perm, double frac, int n) {
        ListGenerator outvec = new ListGenerator();
        for(int i = 0; i < n; i++)
            perm.p.add(i, i+1);
        outvec.p = perm.p;
        //System.out.println("p in gen function: " + p);
        randomPerm(perm);
        int x = perm.p.size();
        while( x > 1)
        {
            perm.p = firstFP(frac, perm);
            System.out.println("perm.p after firstFP call " + perm.p);
            outvec.p.addAll(perm.p);
            System.out.println("size of outvec: " + outvec.p.size());
            x = perm.p.size();
        }
        return outvec;
    }

    //function to generate random permutation of numbers
    private  void randomPerm(ListGenerator perm) {
        Collections.shuffle(perm.p);
        //System.out.println("perm in randomPerm function: " + p);
    }


    //function to return first f*|p| number of elements from p
    List<Integer> firstFP(double f, ListGenerator perm) {
        int new_size = (int) (f * perm.p.size());
        return( perm.p.subList(0, new_size));
    }

    public static void main(String args[]) {
        Generate g = new Generate();
        ListGenerator p = new ListGenerator();
        ListGenerator outvec = new ListGenerator();
        double frac = 0.3;
        int N = 70000;
        outvec = g.gen(p, frac, N);
        System.out.println("outvec: " + outvec.p);
        System.out.println("size of outvec: " + outvec.p.size());
}
}

import java.util.ArrayList;
import java.util.List;

public class ListGenerator {
    List<Integer> p = new ArrayList<Integer>();
}

问题是它在 outvec.p.addAll(temp); 处向我抛出 ConcurrentModificationException;这个说法。这就是我得到的:

Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.ArrayList$SubList.checkForComodification(Unknown Source)
    at java.util.ArrayList$SubList.size(Unknown Source)
    at Generate.gen(Generate.java:17)
    at Generate.main(Generate.java:49)

我们将不胜感激任何指导。

【问题讨论】:

  • 该代码无法编译。你确定这是你的真实代码吗?
  • 如果没有看到 ListGeneratorfirstFP() 的代码,以及 fracperm 的值,任何人都很难(如果不是不可能)提供帮助。
  • 代码毫无意义——尽量给我们一些最小的东西并代表问题,而不是半猜半猜。
  • 大家好..我确实修改了我的代码..有人可以帮忙吗?
  • 人们不要再对这个问题投反对票了。那是2年前。长大了。

标签: exception-handling


【解决方案1】:

您的代码没有编译,错误不在这部分代码中。

并发异常通常发生在您迭代列表或另一个结构并且您在同一列表中同时删除或添加一些元素时。

【讨论】:

    猜你喜欢
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 2022-09-24
    • 1970-01-01
    • 2013-02-12
    相关资源
    最近更新 更多