У меня есть следующая структура:
public void someMethod(){
//DO SOME STUFF
try{
doSomeProcessing();
}
catch (Exception e){
loadSomeHeavyData();
doSomeProcessing();
}
}
Метод someMethod может быть вызван одновременно многими потоками. doSomeProcessing может генерировать исключение (он использует некоторые данные в бэкэнд, которые могут стать устаревшими).
Если исключение выбрано, то loadSomeHeavyData(); выполняет некоторую задачу времени, которая позволяет сказать "обновить" все текущие данные, и я могу позвонить doSomeProcessing();.
Проблема:. Как я могу убедиться, что loadSomeHeavyData(); вызывается только один раз? Если я помещаю некоторый атомный флаг в запись loadSomeHeavyData();, тогда я не могу быть уверен, когда это нужно очистить.
Как я могу это решить? Просто примечание: я не могу изменить doSomeProcessing();, поскольку это внешний API, и я использую шаблон декоратора, чтобы использовать его.