Я прочитал все и наоборот об использовании Java ConcurrentHashMap. Я надеюсь, что мой вопрос поможет прояснить то, что выглядит простым (с актуальными ответами).
У меня есть такая карта:
ConcurrentHashMap<Integer, ClassA> map = new ConcurrentHashMap<Integer, ClassA>()
Я использую ConcurrentHashMap, чтобы сохранить и обеспечить безопасность потока операций. Мой ClassA имеет некоторые атрибуты Integer/String и коллекцию строк.
Теперь я хотел бы знать, как безопасно обновить мой сопоставленный объект. Если я хочу создать метод для обновления объекта с моей карты, добавив новую строку, у меня есть что-то вроде:
synchronized(map)
{
Collection<String> strings = map.get(id).getStrings();
if(!strings.contains(newString)) //strings can't be null
{
strings.add(newString);
}
}
Защищен ли этот код от одновременного чтения/записи? Можно ли это сделать по-другому, используя Java API?