Fail-fast and Fail-safe iterations in Java

Escape from ConcurrentModificationExceptions

Sarangan Janakan
3 min readJan 29, 2023

Are you tired of dealing with ConcurrentModificationExceptions while iterating through your collections in Java?

The solution to this problem lies in understanding the difference between “fail-fast” and “fail-safe” iterators.

A “fail-fast” iterator throws a ConcurrentModificationException if the collection is modified while it is being iterated. This is because the iterator is designed to detect concurrent modifications as soon as they occur and fail immediately, rather than potentially continuing with an inconsistent or unexpected state. Examples of fail-fast iterators include Iterator and ListIterator.

On the other hand, a “fail-safe” iterator does not throw a ConcurrentModificationException if the collection is modified while it is being iterated. Instead, it creates a separate copy of the collection to iterate over, so that the original collection can be modified without affecting the iteration.

It’s important to note that while fail-fast iterators are more efficient as they do not create a separate copy of the collection, they are not suitable in multi-threaded environments where the collection is modified by multiple threads simultaneously. In such cases, it’s better to use fail-safe…

--

--