我有以下结构:
public void someMethod(){
//DO SOME STUFF
try{
doSomeProcessing();
}
catch (Exception e){
loadSomeHeavyData();
doSomeProcessing();
}
}
该方法someMethod
可以被多个线程同时调用。doSomeProcessing
可能会抛出异常(它在后端使用了一些可能会过时的数据)。
如果抛出异常,则loadSomeHeavyData();
执行一些耗时的任务,比如说“更新”所有当前数据,我可以调用doSomeProcessing();
.
问题:如何确保loadSomeHeavyData();
只调用一次?如果我在条目中放了一些原子标志,loadSomeHeavyData();
那么我不能确定什么时候应该清除它。
我该如何解决这个问题?请注意:我无法修改doSomeProcessing();
,因为它是一个外部 API,我正在使用装饰器模式来使用它。