【发布时间】:2011-08-18 06:29:05
【问题描述】:
我在试图通过两个线程同步的地图中的地图内有一个嵌套集。
地图是这样实例化的:
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 进行同步。
我对同步相当陌生,我想知道这是否是正确的方法 像这样同步一个嵌套的数据结构。
感谢您的帮助。
【问题讨论】:
标签: java map synchronization nested set