Synchronizacja Java 1.4: zezwalaj na uruchamianie tylko jednej instancji metody (bez blokowania)?

Mam klasę proponującą narzędzia do tłumaczenia. Same tłumaczenia powinny być ładowane co 30 minut. Używam do tego obsługi Spring Timer. Zasadniczo moja klasa wygląda tak:

public interface Translator {
    public void loadTranslations();
    public String getTranslation(String key);
}

loadTranslations () może być dość długi do uruchomienia, więc podczas uruchamiania stare tłumaczenia są nadal dostępne. Odbywa się to poprzez załadowanie tłumaczeń do lokalnej mapy i zmianę referencji po załadowaniu wszystkich tłumaczeń.

Mój problem polega na tym, jak upewnić się, że gdy wątek już ładuje tłumaczenia, drugi próbuje również uruchomić, wykrywa to i wraca natychmiast, bez rozpoczynania drugiej aktualizacji.

Zsynchronizowana metoda będzie tylko kolejkować ładunki ... Nadal jestem w Javie 1.4, więc nie java.util.concurrent.

Dzięki za pomoc !

questionAnswers(4)

yourAnswerToTheQuestion