У меня есть вложенный набор в карте на карте, которую я пытаюсь синхронизировать в двух потоках.
Карта создается как таковая:
private final Map<Manageable, Map<String, Set<Manageable>>> manageableMap =
Collections.synchronizedMap(new HashMap<Manageable, Map<String, Set<Manageable>>>());
Это функция, которую я использую для добавления значений на карту:
private void put(Manageable key, Manageable value, String valueType) {
synchronized (manageableMap) {
Map<String, Set<Manageable>> setMap = manageableMap.get(key);
if (setMap == null) {
setMap = new HashMap<String, Set<Manageable>>();
manageableMap.put(key, Collections.synchronizedMap(setMap));
}
synchronized (setMap) {
Set<Manageable> set = setMap.get(valueType);
if (set == null) {
set = new HashSet<Manageable>();
setMap.put(valueType, Collections.synchronizedSet(set));
}
synchronized (set) {
set.add(value);
}
}
}
}
Intellij IDEA предупреждает меня, что я синхронизируюсь с локальными переменными setMap и set.
Я довольно новичок в синхронизации, и мне было интересно, если это правильный способ
синхронизировать вложенную структуру данных следующим образом.
Спасибо за помощь.