>>> myDict = {"testing": 1, "testing2": 2, "my_key": 3}
>>>
>>>
>>> def updatedata(data):
... k = 'my_key'
... for key, val in data.items(): # use a different variable to reduce confusion
... if key == 'my_key':
... data[key] = 'True' # specify the key, not the value
... return data # optional, unless you want to save into a new variable
...
>>>
>>> updatedata(myDict)
>>> myDict
{'testing': 1, 'testing2': 2, 'my_key': 'True'}
>>>
Это не проблема синхронизации. Это произойдет, если базовый набор, который выполняется с помощью итераций, будет изменен чем-нибудь кроме самого Итератора.
Iterator it = map.entrySet().iterator();
while (it.hasNext())
{
Entry item = it.next();
map.remove(item.getKey());
}
Это бросит ConcurrentModificationException, когда it.hasNext () назовут во второй раз.
корректный подход был бы
Iterator it = map.entrySet().iterator();
while (it.hasNext())
{
Entry item = it.next();
it.remove();
}
Предположение, что этот итератор поддерживает удаление () операция.
Попытайтесь использовать ConcurrentHashMap вместо плоскости HashMap
Это меньше походит на проблему синхронизации Java и больше как проблема блокировки базы данных.
я не знаю при добавлении, что версия ко всем персистентным классам уладит его, но это - один путь, которые В спящем режиме, может обеспечить эксклюзивный доступ к строкам в таблице.
Мог быть то, что уровень изоляции должен быть выше. При разрешении "грязных чтений" возможно, необходимо натолкнуться до сериализуемого.
Попробуйте или CopyOnWriteArrayList или CopyOnWriteArraySet в зависимости от того, что Вы пытаетесь сделать.
В Java 8 можно использовать лямбда-выражение:
map.keySet().removeIf(key -> key condition);