¿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.