Como posso ter certeza de que um método só é chamado uma vez por vários segmentos?
Eu tenho a seguinte estrutura:
public void someMethod(){
//DO SOME STUFF
try{
doSomeProcessing();
}
catch (Exception e){
loadSomeHeavyData();
doSomeProcessing();
}
}
O métodosomeMethod
maio ser chamado simultaneamente por muitos threads. odoSomeProcessing
maio lançar uma exceção (está usando alguns dados no backend que podem se tornar obsoletos).
Se uma exceção é lançada entãoloadSomeHeavyData();
faz alguma tarefa demorada que digamos "atualiza" todos os dados atuais e eu posso chamardoSomeProcessing();
.
Problema: Como posso ter certeza de queloadSomeHeavyData();
é chamado apenasuma vez? Se eu colocar alguma bandeira atômica na entrada doloadSomeHeavyData();
então eu não posso ter certeza quando isso deve ser apagado.
Como posso resolver isso? Apenas uma nota: não posso modificardoSomeProcessing();
como é uma API externa e estou usando o padrão decorator para usá-lo.