【发布时间】:2014-05-15 14:32:19
【问题描述】:
你好,有人可以帮助我吗?
当多个线程访问mKeySet时,有人在方法toValue中随机读取为零大小,而不是null,为什么?
for (String key : mKeySet) {
String v = map.get(key);
if (v == null) {
v = EMPTY;
}
if (i > 0)
buf.append(",");
buf.append("'").append(v).append("'");
i++;
}
我刚刚同步了方法?
【问题讨论】:
-
map.keySet() 返回一个由地图支持的 Set,因此当您在方法之外修改地图时,mKeySet 也会发生变化!相反,您必须复制集合,例如使用新的 HashSet(map.keySet())。除此之外,您的方法没有正确同步,因此不是线程安全的。
标签: java multithreading synchronized