如何正确同步?

时间:2012-01-21 23:32:08

标签: android multithreading synchronize

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 直到此方法完成。我该如何正确地做到这一点?

2 个答案:

答案 0 :(得分:0)

创建一个锁定对象:

private static final void LOCK = new Object();

并同步。

答案 1 :(得分:0)

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

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

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

至于响应,这比较棘手,因为我不是OmwListResponse。你拥有那门课吗?如果是这样,请使用与上述相同的方法。如果没有,你可能会失败。