java.util.ConcurrentModificationException | Code Factory

package com.codeFactory;import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class ConcurrentModificationExceptionExample {public static void main(String args[]) {
List<String> myList = new ArrayList<String>();
myList.add("1");
myList.add("2");
myList.add("3");
myList.add("4");
myList.add("5");
Iterator<String> it = myList.iterator();
while (it.hasNext()) {
String value = it.next();
System.out.println("List Value : " + value);
if (value.equals("3"))
myList.remove(value);
}
Map<String, String> myMap = new HashMap<String, String>();
myMap.put("1", "1");
myMap.put("2", "2");
myMap.put("3", "3");
Iterator<String> it1 = myMap.keySet().iterator();
while (it1.hasNext()) {
String key = it1.next();
System.out.println("Map Value : " + myMap.get(key));
if (key.equals("2")) {
myMap.put("1", "4");
// myMap.put("4", "4");
}
}
}
}
List Value : 1
List Value : 2
List Value : 3
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
at com.codeFactory.ConcurrentModificationExceptionExample.main(ConcurrentModificationExceptionExample.java:21)
Map Value : 1
Map Value : 2
Map Value : 3

To Avoid ConcurrentModificationException in multi-threaded environment

  • You can convert the list to an array and then iterate on the array. This approach works well for small or medium size list but if the list is large then it will affect the performance a lot.
  • You can lock the list while iterating by putting it in a synchronized block. This approach is not recommended because it will cease the benefits of multithreading.
  • If you are using JDK 1.5 or higher then you can use ConcurrentHashMap and CopyOnWriteArrayList classes. This is the recommended approach to avoid concurrent modification exception.
package com.codeFactory;import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
public class ConcurrentModificationExceptionExample {public static void main(String args[]) {
List<String> myList = new CopyOnWriteArrayList<String>();
myList.add("1");
myList.add("2");
myList.add("3");
myList.add("4");
myList.add("5");
Iterator<String> it = myList.iterator();
while (it.hasNext()) {
String value = it.next();
System.out.println("List Value : " + value);
if (value.equals("2")) {
myList.remove("4");
myList.add("6");
myList.add("7");
}
}
System.out.println("List Size : " + myList.size());
Map<String, String> myMap = new ConcurrentHashMap<String, String>();
myMap.put("1", "1");
myMap.put("2", "2");
myMap.put("3", "3");
Iterator<String> it1 = myMap.keySet().iterator();
while (it1.hasNext()) {
String key = it1.next();
System.out.println("Map Value : " + myMap.get(key));
if (key.equals("2")) {
myMap.remove("3");
myMap.put("4", "4");
myMap.put("5", "5");
}
}
System.out.println("Map Size : " + myMap.size());
}
}
List Value : 1
List Value : 2
List Value : 3
List Value : 4
List Value : 5
List Size : 6
Map Value : 1
Map Value : 2
Map Value : null
Map Value : 4
Map Value : 5
Map Size : 4

--

--

--

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

Most Important Scenarios, while executing Performance testing

A Simple GitHub Workflow

Game Assets via Filebase

Introduction to android

420 College | CaNORML Directory

My First Blog Post!

Rubic Weekly Report 8/20/21

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Code Factory

Code Factory

More from Medium

Number of Paths — Pramp question Java

Java: Synchronizing ints

Java Threads

How long should I wait to retry a failed async job? Here is the Exponential backoff