Sincronização em um cache HashMap

Eu tenho um aplicativo da web onde as pessoas solicitam recursos. Esses recursos são armazenados em cache usando um mapa de hash sincronizado para maior eficiência. O problema aqui é quando duas solicitações diferentes chegam para o mesmo recurso não armazenado em cache ao mesmo tempo: a operação de recuperação dos recursos consome muita memória; portanto, desejo evitar chamá-lo mais de uma vez para o mesmo recurs

Alguém pode me dizer se existe algum problema em potencial com o seguinte trecho? Desde já, obrigado

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);
      }
    }
  }

  ...

}

questionAnswers(4)

yourAnswerToTheQuestion