java.util.ConcurrentModification非多线程程序中的例外
2022-09-03 08:28:09
						嘿,SO Guru的我用这个代码做了一堆工作
public void kill(double GrowthRate, int Death)
{
    int before = population.size();
    for (PopulationMember p : population)
    {
        int[] probs = ProbablityArrayDeath(GrowthRate,Death,(int)p.fitness());
        if (probs[RandomNumberGen.nextRandomInt(0, 99)]==0)
        {
            population.remove(p);
        }
    }
    System.out.println("Intial Population: "+before+", Deaths:"+(before-          population.size())+", New Population: "+population.size());
}
当我第一次运行我的程序时,它尝试运行代码时,它会遇到此错误
Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
    at java.util.HashMap$KeyIterator.next(HashMap.java:828)
    at Genetics.Population.kill(Population.java:181)
    at Genetics.Population.run(Population.java:47)
    at Control.Main.main(Main.java:35)
在稍微绕了一圈之后,这似乎是一个错误,通常发生在线程上,为什么它们会尝试并发访问相同的资源,但这就是让我在这个系统中根本不是多线程的原因。
有人可以解释为什么会发生这种情况,或者想出一个黑客来解决这个问题吗?
非常感谢 ^_^