I encountered ConcurrentModificationException and by looking at it I can’t see the reason why it’s happening; the area throwing the exception and all the places modifying the collection are surrounded by
synchronized (this.locks.get(id)) {
...
} // locks is a HashMap<String, Object>;
I tried to catch the the pesky thread but all I could nail (by setting a breakpoint in the exception) is that the throwing thread owns the monitor while the other thread (there are two threads in the program) sleeps.
How should I proceed? What do you usually do when you encounter similar threading issues?
It may have nothing to do with the synchronization block.
ConcurrentModificationExceptions often occur when you’re modifying a collection while you are iterating over its elements.