Подтвердить что ты не робот

Безопасность потоков на Android LruCache (Android 3.1)

Является ли новый класс Android LruCache потокобезопасным? В java-документе говорится:

Этот класс является потокобезопасным. Выполнять несколько операций кеша атомарно, синхронизируя в кеше:

   synchronized (cache) {
     if (cache.get(key) == null) {
         cache.put(key, value);

   }}

Они хотели сказать НЕ потокобезопасным? Зачем нужно синхронизировать, если класс является потокобезопасным?

Спасибо!

4b9b3361

Ответ 1

Не имеет значения, является ли класс потокобезопасным или нет. Если вы используете несколько операций, вам все равно нужно синхронизировать. Зависит от того, как вы его используете.

if (cache.get(key) == null)
{
  //at this point you think there is no such value in the cache
  //but another thread might have just added one between executing
  //those two lines of code
  cache.put(key, value);
}