Java 1.4-Synchronisation: Nur eine Instanz der Methode ausführen lassen (nicht blockieren)?
Ich habe eine Klasse, die Übersetzungsdienstprogramme vorschlägt. Die Übersetzungen selbst sollten alle 30 Minuten neu geladen werden. Ich benutze dafür die Spring Timer-Unterstützung. Grundsätzlich sieht meine Klasse so aus:
public interface Translator {
public void loadTranslations();
public String getTranslation(String key);
}
loadTranslations () kann ziemlich lange dauern, so dass die alten Übersetzungen noch verfügbar sind, während es ausgeführt wird. Dies geschieht, indem die Übersetzungen in eine lokale Map geladen werden und nur die Referenz geändert wird, wenn alle Übersetzungen geladen sind.
Mein Problem ist: Wie stelle ich sicher, dass, wenn ein Thread bereits Übersetzungen lädt, ein zweiter auch versucht auszuführen, dies erkannt und sofort zurückgegeben wird, ohne ein zweites Update zu starten.
Eine synchronisierte Methode wird nur die Lasten in die Warteschlange stellen ... Ich bin immer noch auf Java 1.4, also keine java.util.concurrent.
Danke für Ihre Hilfe !