同步方法读取相同的成员变量失败,为什么?

时间:2014-05-15 14:32:20

标签: java multithreading synchronized

enter image description here

你好,有人可以帮帮我吗? 当多个线程访问mKeySet时,有人在方法toValue中随机读取零大小,而不是空,为什么?

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++;
}

我刚刚同步了这个方法?

1 个答案:

答案 0 :(得分:0)

您已经在类store上同步了方法Datastore,而不是地图---换句话说,您正在锁定Datastore对象。

如果地图上有其他任何用户,则需要同步访问map ---锁定地图本身 - 而不是方法:synchronized (map) { // Do things to the map }