Last Updated : 12 Jul, 2025
ConcurrentModificationException in Multi threaded environmentIn
multi threaded environment, if during the detection of the resource, any method finds that there is a concurrent modification of that object which is not permissible, then this ConcurrentModificationException might be thrown.
If we are trying to modify any collection in the code using a thread, but some another thread is already using that collection, then this will not be allowed.
ConcurrentModificationException in Single threaded environmentSince, there is no guarantee that whenever this exception is raised, an object is been under concurrent modification by some different thread, this exception is also thrown in the
single-threaded environment. If we invoke a sequence of methods on an object that violates its contract, then the object throws ConcurrentModificationException.
For example:if while iterating over the collection, we directly try to modify that collection, then the given
fail-fast iteratorwill throw this ConcurrentModificationException.
Example:In the following code, an ArrayList is implemented. Then few values are added to it and few modifications are made over it while traversing,
Java
// Java program to show
// ConcurrentModificationException
import java.util.Iterator;
import java.util.ArrayList;
public class modificationError {
public static void main(String args[])
{
// Creating an object of ArrayList Object
ArrayList<String> arr
= new ArrayList<String>();
arr.add("One");
arr.add("Two");
arr.add("Three");
arr.add("Four");
try {
// Printing the elements
System.out.println(
"ArrayList: ");
Iterator<String> iter
= arr.iterator();
while (iter.hasNext()) {
System.out.print(iter.next()
+ ", ");
// ConcurrentModificationException
// is raised here as an element
// is added during the iteration
System.out.println(
"\n\nTrying to add"
+ " an element in "
+ "between iteration\n");
arr.add("Five");
}
}
catch (Exception e) {
System.out.println(e);
}
}
}
Output:
ArrayList: One, Trying to add an element in between iteration java.util.ConcurrentModificationExceptionHow to avoid ConcurrentModificationException?
To avoid this exception,
Let’s see how to resolve this exception by simply changing the place of modification.
Java
// Java program to show
// ConcurrentModificationException
import java.util.Iterator;
import java.util.ArrayList;
public class modificationError {
public static void main(String args[])
{
// Creating an object of ArrayList Object
ArrayList<String> arr
= new ArrayList<String>();
arr.add("One");
arr.add("Two");
arr.add("Three");
arr.add("Four");
try {
// Printing the elements
System.out.println(
"ArrayList: ");
Iterator<String> iter
= arr.iterator();
while (iter.hasNext()) {
System.out.print(iter.next()
+ ", ");
}
// No exception is raised as
// a modification is done
// after the iteration
System.out.println(
"\n\nTrying to add"
+ " an element in "
+ "between iteration: "
+ arr.add("Five"));
// Printing the elements
System.out.println(
"\nUpdated ArrayList: ");
iter = arr.iterator();
while (iter.hasNext()) {
System.out.print(iter.next()
+ ", ");
}
}
catch (Exception e) {
System.out.println(e);
}
}
}
Output:
ArrayList: One, Two, Three, Four, Trying to add an element in between iteration: true Updated ArrayList: One, Two, Three, Four, Five,
From the output, it can be seen clearly that with minimal changes in the code, ConcurrentModificationException can be eliminated.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4