Jak mogę się upewnić, że metoda jest wywoływana tylko raz przez wiele wątków?

Mam następującą strukturę:

public void someMethod(){  
   //DO SOME STUFF
   try{  
    doSomeProcessing();  
   }  
   catch (Exception e){  
        loadSomeHeavyData();  
        doSomeProcessing();      
   }    
}  

MetodasomeMethod może być wywoływane jednocześnie przez wiele wątków. ThedoSomeProcessing może rzuć wyjątek (używa niektórych danych z zaplecza, które mogą stać się przestarzałe).
Jeśli zostanie zgłoszony wyjątekloadSomeHeavyData(); wykonuje pewne zadanie czasowe, powiedzmy „zaktualizuj” wszystkie bieżące dane i mogę zadzwonićdoSomeProcessing();.
Problem: Jak mogę się tego upewnićloadSomeHeavyData(); nazywa się tylkopewnego razu? Jeśli umieściłem jakąś flagę atomową we wpisieloadSomeHeavyData(); wtedy nie mogę być pewien, kiedy to powinno zostać usunięte.
Jak mogę to rozwiązać? Tylko uwaga: nie mogę modyfikowaćdoSomeProcessing(); ponieważ jest to zewnętrzny interfejs API i używam go z dekoratorem.

questionAnswers(5)

yourAnswerToTheQuestion