Я получаю одновременное исключение модификации при выполнении следующего кода:java.util.concurrent.ExecutionException: java.util.ConcurrentModificationException
MyMap является глобальной переменной и является HashMap
Callable<String> task = new Callable<String>() {
@Override
public String call() {
mymap.put("myid", "id2");
mymap.put("myname", "joe");
String id = mymap.get("myid");
System.out.println("id is: "+ id+ ", mymap BEFORE: "+mymap.toString());
mymap.remove("myid");
System.out.println("id is: "+ id+ ", mymap AFTER: "+mymap.toString());
return id;
}
};
List<Callable<String>> tasks = Collections.nCopies(7, task);
ExecutorService executorService = Executors.newFixedThreadPool(7);
List<Future<String>> futures = executorService.invokeAll(tasks);
List<String> resultList = new ArrayList<String>(futures.size());
for (Future<String> future: futures){
resultList.add(future.get());
}
исключение линиями:
resultList.add(future.get());
и
System.out.println("id is: "+ id+ ", mymap AFTER: "+mymap.toString());
Однако, если я пытаюсь
System.out.println("srcNode AFTER: "+srcNode.toString()+ ", id: "+id);
вместо ошибка, кажется, исчезает. Какие-нибудь подсказки о том, что происходит?
Что такое Mymap? – assylias
его HasHMap() ... спасибо, что указали это. –
chapstick
@chapstick u r используя многопоточность ?? – Kick