Может следующая часть кода быть переписанной использование w/o Collections.synchronizedMap()
уже поддерживая правильность в параллелизме?
Collections.synchronizedMap(new WeakHashMap<Class, Object>());
т.е. есть ли что-то от java.util.concurrent, который можно использовать вместо этого? Отметьте это просто заменяющее
new ConcurrentHashMap<Class, Object>(new WeakHashMap<Class, Object>()));
очевидно, не будет работать
Guava CacheBuilder позволяет легко это сделать.
CacheBuilder.newBuilder().weakKeys().build()
Обратите внимание, что это изменяет семантику ключевого равенства на ==
вместо .equals ()
, что не имеет значения в вашем случае использования экземпляров Class
, но это потенциальная ловушка.
Я не верю, что есть. Фактически, javadoc предлагает использовать Collections.synchronizedMap ()
«Как и большинство классов коллекций, этот класс не синхронизирован. Синхронизированный WeakHashMap может быть создан с использованием метода Collections.synchronizedMap».