Является ли get() потокобезопасной операцией в кеше Guava?JAVA

Программисты JAVA общаются здесь
Anonymous
Является ли get() потокобезопасной операцией в кеше Guava?

Сообщение Anonymous »

Я обнаружил, что операции put и get с помощью операций CacheLoader используют реентерабельную блокировку, но почему это не реализовано для операции getIfPresent?
get, которая используется getIfPresent >

Код: Выделить всё

@Nullable
V get(Object key, int hash) {
try {
if (this.count != 0) {
long now = this.map.ticker.read();
ReferenceEntry e = this.getLiveEntry(key, hash, now);
Object value;
if (e == null) {
value = null;
return value;
}

value = e.getValueReference().get();
if (value != null) {
this.recordRead(e, now);
Object var7 = this.scheduleRefresh(e, e.getKey(), hash, value, now, this.map.defaultLoader);
return var7;
}

this.tryDrainReferenceQueues();
}

Object var11 = null;
return var11;
} finally {
this.postReadCleanup();
}
}
поставить

Код: Выделить всё

 @Nullable
V put(K key, int hash, V value, boolean onlyIfAbsent) {
this.lock();
.....
Единственное, что я могу сделать для достижения потокобезопасности в базовых операциях получения/записи, — это использовать синхронизацию на клиенте?

Подробнее здесь: https://stackoverflow.com/questions/706 ... avas-cache

Вернуться в «JAVA»