Как правильно синхронизировать это? - PullRequest
0 голосов
/ 22 января 2012
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 голосов
/ 22 января 2012

Синхронизация cacheList очень проста.Просто оберните любой код, который использует ваш код:

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

Если cacheList является открытым членом, и вы боитесь, что внешние классы изменят его, сделайте его закрытым и синхронизируйте метод получения и установки.Это единственный способ, поскольку у вас нет контроля над тем, что делают другие классы, и вы несете ответственность за синхронизацию своих членов.

Что касается ответа, это сложнее, потому что я не понимаю, что такое OmwListResponse.У вас есть этот класс?Если это так, используйте тот же метод, что и выше.Если нет, возможно, вам не повезло.

0 голосов
/ 22 января 2012

Создать объект блокировки:

private static final void LOCK = new Object();

и синхронизировать на этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...