Search code examples
javaconcurrentmodification

Java - weird ConcurrentModificationException


I loop through a copy of a set of objects, but it still gives me an error starting at this method:

private static Set<Updated> updates = new HashSet<>();
public static Set<GameObject> getGameObjects() {
    Set<GameObject> objs = new HashSet<>();
    for (Updated up : new HashSet<Updated>(updates)) {
        if (up instanceof GameObject)
            objs.add((GameObject) up);
    }
    return objs;
}

(Where the for loop is). This only happens when there are quite a few GameObjects, and never occurs when there's only a few (like 7). Thank you!


Solution

  • The problem is that somebody in another thread changes the updates set while it is being copied in new HashSet<Updated>(updates).

    You cannot do this without synchronization. Or use ConcurrentHashMap instead of HashSet