У меня есть веб-приложение, в котором люди запрашивают ресурсы. Эти ресурсы кэшируются с использованием синхронизированной хеш-карты для повышения эффективности. Проблема здесь в том, что два разных запроса поступают для одного и того же некэшированного ресурса одновременно: операция извлечения ресурсов занимает много памяти, поэтому я не хочу вызывать ее более одного раза для одного и того же ресурса.
Кто-нибудь, пожалуйста, скажите мне, есть ли потенциальная проблема со следующим фрагментом? Заранее спасибо.
private Map<String, Resource> resources = Collections.synchronizedMap(new HashMap<String, Resource>());
public void request(String name) {
Resource resource = resources.get(name);
if (resource == null) {
synchronized(this) {
if (resources.get(name) == null) {
resource = veryCostlyOperation(name); // This should only be invoked once per resource...
resources.put(resource);
} else {
resource = resources.get(name);
}
}
}
...
}