Безопасность потоков на Android LruCache (Android 3.1)
Является ли новый класс Android LruCache потокобезопасным? В java-документе говорится:
Этот класс является потокобезопасным. Выполнять несколько операций кеша атомарно, синхронизируя в кеше:
synchronized (cache) {
if (cache.get(key) == null) {
cache.put(key, value);
}}
Они хотели сказать НЕ потокобезопасным? Зачем нужно синхронизировать, если класс является потокобезопасным?
Спасибо!
Ответы
Ответ 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);
}