0
public void consumeResponse(OmwListResponse<T> response) {
    synchronized (response.getResultList()) { // XXX this isn't synchronized safely
        for (T t : response.getResultList()) {
            if (!cacheList.contains(t)) {
                cacheList.add(t);
            }
        }
    }
}

情况是我不希望任何人在此方法完成之前有机会response.getResultList()cacheList 。我该如何正确地做到这一点?

4

2 回答 2

0

创建一个锁对象:

private static final void LOCK = new Object();

并对此进行同步。

于 2012-01-21T23:36:27.580 回答
0

同步 cacheList 很容易。只需包装使用它的代码的任何代码:

synchronized(cacheList) {
   // Make changes to cacheList here
}

如果 cacheList 是公共成员并且您担心外部类会更改它,请将其设为私有成员并同步 getter 和 setter。这是唯一的方法,因为您无法控制其他类的操作,并且您有责任同步您的成员。

至于响应,这更棘手,因为我不知道 OmwListResponse 是什么。你拥有那个班级吗?如果是这样,请使用与上述相同的方法。如果没有,你可能不走运。

于 2012-01-21T23:55:45.510 回答