Есть ли java.util.concurrent эквивалентен для WeakHashMap?

Может следующая часть кода быть переписанной использование w/o Collections.synchronizedMap() уже поддерживая правильность в параллелизме?

Collections.synchronizedMap(new WeakHashMap<Class, Object>());

т.е. есть ли что-то от java.util.concurrent, который можно использовать вместо этого? Отметьте это просто заменяющее

new ConcurrentHashMap<Class, Object>(new WeakHashMap<Class, Object>()));

очевидно, не будет работать

46
задан hoat4 29 January 2017 в 11:48
поделиться

2 ответа

Класс

Guava CacheBuilder позволяет легко это сделать.

CacheBuilder.newBuilder().weakKeys().build()

Обратите внимание, что это изменяет семантику ключевого равенства на == вместо .equals () , что не имеет значения в вашем случае использования экземпляров Class , но это потенциальная ловушка.

36
ответ дан 26 November 2019 в 20:38
поделиться

Я не верю, что есть. Фактически, javadoc предлагает использовать Collections.synchronizedMap ()

«Как и большинство классов коллекций, этот класс не синхронизирован. Синхронизированный WeakHashMap может быть создан с использованием метода Collections.synchronizedMap».

19
ответ дан 26 November 2019 в 20:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: