Below code gives when I run the below code multiple time ConcurrentModificationException
.
When I use non concurrentHashMap
it is working fine.
public static void main(String[] args) {
Map<String, String> stringSyncedMap = Collections.synchronizedMap(new HashMap<String, String>());
CollectionJob collectionJob1 = new CollectionJob(stringSyncedMap, "read");
CollectionJob collectionJob2 = new CollectionJob(stringSyncedMap, "write");
Thread thread1 = new Thread(collectionJob1, "T1");
Thread thread2 = new Thread(collectionJob2, "T2");
thread1.start();
thread2.start();
}
}
public class CollectionJob implements Runnable {
private Map<String, String> stringCollection;
private String operation;
public CollectionJob(Map<String, String> stringCollection, String operation) {
this.stringCollection = stringCollection;
this.operation = operation;
}
public void run() {
if (operation.equals("read"))
readFromCollection();
else
writeToCollection();
System.out.println("done");
}
public void writeToCollection() {
for (int i = 10; i < 20; i++) {
stringCollection.put("String " + i, "String"+i);
}
public void readFromCollection() {
for (String str : stringCollection.keySet())
System.out.println(str);
}
}
What I am missing.