Sincronização do Java 1.4: permite apenas que uma instância do método seja executada (sem bloqueio)?
Eu tenho uma aula propondo utilitários de traduções. As traduções devem ser recarregadas a cada 30 minutos. Eu uso o suporte do Spring Timer para isso. Basicamente, minha aula parece:
public interface Translator {
public void loadTranslations();
public String getTranslation(String key);
}
O loadTranslations () pode ser muito longo para ser executado, portanto, enquanto ele estiver sendo executado, as traduções antigas ainda estarão disponíveis. Isso é feito carregando as traduções em um mapa local e apenas alterando a referência quando todas as traduções são carregadas.
Meu problema é: como posso ter certeza de que quando um thread já está carregando traduções, é um segundo também tenta executar, ele detecta e retorna imediatamente, sem iniciar uma segunda atualização.
Um método sincronizado somente enfileirará as cargas ... Ainda estou no Java 1.4, portanto, não java.util.concurrent.
Obrigado pela ajuda !