Back to Blog
Developer guide
JAVAMay 9, 2026

Java ConcurrentModificationException Explained: Causes and Solutions

ConcurrentModificationException in Java is a popular error that occurs when a program attempts to modify a collection while it is being iterated over. This error can be challenging to debug, especially for developers new to Java. In this article, we'll delve into the causes of ConcurrentModificationException, explore examples, and provide actionable solutions to help you avoid this error in your Java code.

1. ConcurrentModificationException

ConcurrentModificationException occurs when a program attempts to modify a collection while it is being iterated over. This error typically happens when using methods like remove(), add(), or clear() on a collection while it's being iterated over using an iterator or a for-each loop

Why It Happens

This error occurs due to the concurrent access of the collection, where multiple threads or a single thread is accessing and modifying the collection simultaneously. This can be caused by using an Iterator to iterate over a collection while modifying it, or by using a for-each loop to iterate over a collection that's being modified

How to Fix It

To fix this error, you can use the Iterator's remove() method to remove elements from the collection while iterating over it. Alternatively, you can use a for-each loop with an index to iterate over the collection and avoid using the Iterator's remove() method. It's also a good practice to use CopyOnWriteArrayList or other thread-safe collections when working with multiple threads.


2. IteratorOutOfBoundsException

IteratorOutOfBoundsException occurs when you're trying to remove an element from a collection while iterating over it using an Iterator, and the Iterator is pointing to the element being removed

Why It Happens

This error occurs when the Iterator is pointing to the element being removed, and you're trying to remove it. This can happen when using the Iterator's remove() method to remove an element, but the Iterator is not updated to point to the next element

How to Fix It

To fix this error, you can use the Iterator's hasNext() method to check if there are more elements to iterate over, and then use the Iterator's next() method to move the Iterator to the next element before removing the current element. This ensures that the Iterator is updated correctly and avoids the IteratorOutOfBoundsException.


3. UnsupportedOperationException

UnsupportedOperationException occurs when you're trying to modify a collection while iterating over it using a for-each loop, and the collection does not support modification during iteration

Why It Happens

This error occurs when you're using a collection like a Set or a Map that does not support modification during iteration. When you try to modify the collection, the UnsupportedOperationException is thrown

How to Fix It

To fix this error, you can use a collection that supports modification during iteration, such as a List. Alternatively, you can use a for-each loop with an index to iterate over the collection and avoid using the Iterator's remove() method. This ensures that the collection can be modified during iteration.


4. ListIndexOutOfBoundsException

ListIndexOutOfBoundsException occurs when you're trying to remove an element from a List while iterating over it using a for-each loop, and the index of the element being removed is out of bounds

Why It Happens

This error occurs when the index of the element being removed is out of bounds, and you're trying to remove it. This can happen when using a for-each loop to iterate over a List and removing elements from it

How to Fix It

To fix this error, you can use a for-each loop with an index to iterate over the List and avoid using the Iterator's remove() method. This ensures that the index is correctly updated after removing an element and avoids the ListIndexOutOfBoundsException.


5. CollectionModificationException

CollectionModificationException occurs when you're trying to modify a collection while iterating over it using a custom iterator, and the collection is being modified concurrently

Why It Happens

This error occurs when a custom iterator is being used to iterate over a collection, and the collection is being modified concurrently. This can happen when using a custom iterator to iterate over a collection while another thread is modifying it

How to Fix It

To fix this error, you can use a thread-safe collection like CopyOnWriteArrayList or another collection designed for concurrent modification. Alternatively, you can use a custom iterator that is designed to handle concurrent modification, such as a WeakHashMap or another map that allows for concurrent modification.


6. Modifying a Collection while Enumerating

Modifying a Collection while Enumerating occurs when you're trying to modify a collection while iterating over it using an Enumerator, and the collection is being modified concurrently

Why It Happens

This error occurs when an Enumerator is being used to iterate over a collection, and the collection is being modified concurrently. This can happen when using an Enumerator to iterate over a collection while another thread is modifying it

How to Fix It

To fix this error, you can use a thread-safe collection like CopyOnWriteArrayList or another collection designed for concurrent modification. Alternatively, you can use an Enumerator that is designed to handle concurrent modification, such as a WeakHashMap or another map that allows for concurrent modification.


7. Modifying a Collection while Iterating

Modifying a Collection while Iterating occurs when you're trying to modify a collection while iterating over it using a for-each loop or an Iterator, and the collection is being modified concurrently

Why It Happens

This error occurs when a collection is being modified concurrently while iterating over it using a for-each loop or an Iterator. This can happen when using a for-each loop or an Iterator to iterate over a collection while another thread is modifying it

How to Fix It

To fix this error, you can use a thread-safe collection like CopyOnWriteArrayList or another collection designed for concurrent modification. Alternatively, you can use a for-each loop or an Iterator that is designed to handle concurrent modification, such as a WeakHashMap or another map that allows for concurrent modification.


8. Java 8 ConcurrentModificationException

Java 8 ConcurrentModificationException occurs when you're trying to modify a collection while iterating over it using a Stream, and the collection is being modified concurrently

Why It Happens

This error occurs when a Stream is being used to iterate over a collection, and the collection is being modified concurrently. This can happen when using a Stream to iterate over a collection while another thread is modifying it

How to Fix It

To fix this error, you can use a thread-safe collection like CopyOnWriteArrayList or another collection designed for concurrent modification. Alternatively, you can use a Stream that is designed to handle concurrent modification, such as a WeakHashMap or another map that allows for concurrent modification.

Conclusion

ConcurrentModificationException is a common error that can occur when working with collections in Java. By understanding the causes of this error and using the solutions provided in this article, you can avoid this error and write more efficient and thread-safe code. Remember to use thread-safe collections, update iterators correctly, and avoid modifying collections while iterating over them.

Explore More Debugging Resources

- [Browse all JAVA errors](/languages/java)

- [Browse errors by type](/error-types)

- [Search all documented errors](/search)

- [Use the Error Explainer](/error-explainer-tool)

Browse allJava errors

Related JAVA Articles

Have a specific error? Get an instant explanation.

Explain an Error