java.util.ConcurrentModificationException Non un Programme Multithread

Hé oui, Gourou de l'im ayant un diable d'un emploi avec ce code

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());
}

Quand je lance mon programme, la première fois qu'elle essaie d'exécuter le code qu'il rencontre cette erreur

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)

Avoir goggled un peu autour de ce qui semble être une erreur qui se passe normalement avec les threads pourquoi ils essaient et accéder à la même ressource simultanément, mais c'est ce que m'im pas le multithreading dans ce système.

Quelqu'un peut m'expliquer pourquoi ce qui se passe, ou de penser à un hack pour contourner

Merci beaucoup ^_^

OriginalL'auteur Gwilym | 2009-11-29