Our website uses cookies to enhance your browsing experience.
Accept
to the top
>
>
>
V6053. Collection is modified while...
menu mobile close menu
Additional information
toggle menu Contents

V6053. Collection is modified while iteration is in progress. ConcurrentModificationException may occur.

Jul 25 2018

The analyzer has detected a collection that gets modified while being iterated, although it was not designed for concurrent modification. This may raise a 'ConcurrentModificationException'.

Consider several examples of faulty code.

Example 1:

List<Integer> mylist = new ArrayList<>();
....
for (Integer i : mylist)
{
  if (cond)
  {
    mylist.add(i * 2); 
  }
}

Example 2:

List<Integer> myList = new ArrayList<>();
....
Iterator iter = myList.iterator();
while (iter.hasNext())
{
  if (cond)
  {
    Integer i = (Integer) iter.next();
    myList.add(i * 2);
  }
}

Example 3:

Set<Integer> mySet = new HashSet<>();
....
mySet.stream().forEach(i -> mySet.add(i * 2));

However, the analyser will keep silent if a collection permits concurrent modification:

List<Integer> mylist = new CopyOnWriteArrayList<>();
....
for (Integer i : mylist)
{
  if (cond)
  {
    mylist.add(i + 1);
  }
}

It will also keep silent if the loop terminates immediately after the collection is modified:

List<Integer> mylist = new ArrayList<>();
....
for (Integer i : mylist)
{
  if (cond)
  {
    mylist.add(i + 1);
    break;
  }
}

This diagnostic is classified as:

  • CERT-MSC06-J

You can look at examples of errors detected by the V6053 diagnostic.