Приведенный ниже код получает одновременное изменение версии, когда 2 потока доступа одинаковы.ConcurrentModifcationException при добавлении значения в hashmap
Я хотел бы знать, является ли
- ли это исключение можно избежать, если использовать параллельный HashMap.
- Если мы используем одновременный hashmap, будет какая-либо проблема в многопоточной среде.
или есть ли другой способ предотвратить это исключение?
Я не намерен использовать синхронизацию, поскольку этот код используется во время опроса. поскольку одному потоку, возможно, придется подождать, пока другой закончит экзекуцию.
Код
HashMap<Integer, myModel> aServiceHash = new HashMap<Integer, myModel>();
HashMap<Integer, myModel> rServiceHash = new HashMap<Integer, myModel>();
for (myModel ser : serAccepted){
aServiceHash.put(service.getOriginalDate(), ser);
}
for (myModel ser : serRequested) {
if (aServiceHash.containsKey(service.getDate())) {
aServiceHash.put(serv.getDate(), serv);
}
else
rServiceHash.put(service.getDate(), ser);
}
http://www.journaldev.com/378/how-to-avoid-concurrentmodificationexception-when-using-an-iterator
Использование JSF 2.1, 7.1 JDK.
Если поток хочет что-то удалить, должен ли я использовать итератор? –
'ConcurrentHashMap' должно быть хорошо, даже если поток просто использует' remove() '. Конечно, вам понадобится итератор, если это нам, пока вы зацикливаетесь на элементах карты –