¿Cómo puedo asegurarme de que un solo método es llamado una vez por múltiples hilos?

Tengo la siguiente estructura:

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

El métodosomeMethod mayo Ser llamado concurrentemente por muchos hilos. losdoSomeProcessing mayo lanzar una excepción (está usando algunos datos en el backend que podrían volverse obsoletos).
Si se lanza una excepción, entoncesloadSomeHeavyData(); hace una tarea que consume mucho tiempo y que dice "actualiza" todos los datos actuales y puedo llamardoSomeProcessing();.
Problema: ¿Cómo puedo asegurarme de queloadSomeHeavyData(); se llama solouna vez? Si pongo alguna bandera atómica en la entrada deloadSomeHeavyData(); entonces no puedo estar seguro cuando esto debería ser aclarado.
¿Como puedo resolver esto? Solo una nota: no puedo modificardoSomeProcessing(); ya que es una API externa y estoy usando un patrón de decorador para usarlo.

Respuestas a la pregunta(5)

Su respuesta a la pregunta