Back to Blog
Developer guide
JAVAJune 2, 2026

Java ConcurrentModificationException Explained: Causes and Solutions for Developers

In Java, the ConcurrentModificationException is a runtime error that occurs when a program attempts to modify a collection (like a list, set, or map) while it's being iterated over by a foreach loop, an iterator, or a stream. This error can be frustrating for developers, especially when it's not immediately clear what's causing it. In this article, we'll delve into the causes of ConcurrentModificationException in Java, explore its common scenarios, and provide actionable advice on how to prevent and fix this error.

1. ConcurrentModificationException

The ConcurrentModificationException occurs when a program attempts to modify a collection while it's being iterated over by a foreach loop, an iterator, or a stream.

Why It Happens

This error occurs because the iterator or foreach loop doesn't expect the collection to be modified while it's iterating over it, leading to an inconsistent state.

How to Fix It

To fix this error, you can use the fail-fast iterators provided by Java, which throw a ConcurrentModificationException when the collection is modified during iteration. Alternatively, you can use a fail-safe iterator, which allows modifications to the collection during iteration but may not detect all modifications.


2. Iterator Modification

Modifying a collection using an iterator can lead to a ConcurrentModificationException.

Why It Happens

When you use an iterator to modify a collection, the iterator becomes invalid, causing the ConcurrentModificationException.

How to Fix It

To avoid this error, use the iterator to retrieve the elements you need and then modify the collection outside of the iteration. Alternatively, you can use a fail-safe iterator, which allows modifications to the collection during iteration.


3. List Iterator Modification

Modifying a list using a list iterator can lead to a ConcurrentModificationException.

Why It Happens

When you use a list iterator to modify a list, the iterator becomes invalid, causing the ConcurrentModificationException.

How to Fix It

To avoid this error, use the list iterator to retrieve the elements you need and then modify the list outside of the iteration. Alternatively, you can use a fail-safe iterator, which allows modifications to the list during iteration.


4. Map Entry Removal

Removing a map entry while iterating over a map can lead to a ConcurrentModificationException.

Why It Happens

When you remove a map entry while iterating over a map, the iterator becomes invalid, causing the ConcurrentModificationException.

How to Fix It

To avoid this error, use the entrySet() method to iterate over the map entries and then remove the entries outside of the iteration. Alternatively, you can use a fail-safe iterator, which allows modifications to the map during iteration.


5. Collection Modification

Modifying a collection while iterating over it can lead to a ConcurrentModificationException.

Why It Happens

When you modify a collection while iterating over it, the iterator becomes invalid, causing the ConcurrentModificationException.

How to Fix It

To avoid this error, use a fail-safe iterator, which allows modifications to the collection during iteration. Alternatively, you can use a temporary collection to store the modified elements and then update the original collection outside of the iteration.


6. ArrayList Modification

Modifying an ArrayList while iterating over it can lead to a ConcurrentModificationException.

Why It Happens

When you modify an ArrayList while iterating over it, the iterator becomes invalid, causing the ConcurrentModificationException.

How to Fix It

To avoid this error, use an ArrayList with a fail-safe iterator, which allows modifications to the list during iteration. Alternatively, you can use a temporary ArrayList to store the modified elements and then update the original ArrayList outside of the iteration.


7. HashSet Modification

Modifying a HashSet while iterating over it can lead to a ConcurrentModificationException.

Why It Happens

When you modify a HashSet while iterating over it, the iterator becomes invalid, causing the ConcurrentModificationException.

How to Fix It

To avoid this error, use a HashSet with a fail-safe iterator, which allows modifications to the set during iteration. Alternatively, you can use a temporary HashSet to store the modified elements and then update the original HashSet outside of the iteration.

Conclusion

In conclusion, the ConcurrentModificationException is a common error that occurs when a program attempts to modify a collection while it's being iterated over by a foreach loop, an iterator, or a stream. By understanding the causes of this error and following the step-by-step solutions outlined in this article, you can effectively prevent and fix this error in your Java code.

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