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 直到此方法完成。我该如何正确地做到这一点?
答案 0 :(得分:0)
创建一个锁定对象:
private static final void LOCK = new Object();
并同步。
答案 1 :(得分:0)
同步cacheList很容易。只需将您使用它的代码包装在任何代码中:
synchronized(cacheList) {
// Make changes to cacheList here
}
如果cacheList是公共成员,并且您害怕外部类会更改它,请将其设为私有成员并同步getter和setter。这是唯一的方法,因为您无法控制其他类的操作,您有责任同步您的成员。
至于响应,这比较棘手,因为我不是OmwListResponse。你拥有那门课吗?如果是这样,请使用与上述相同的方法。如果没有,你可能会失败。