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