【发布时间】:2013-10-01 18:40:23
【问题描述】:
我正在装饰一个类,其中一些方法返回一个 Future。在一种特定情况下,我对 Future 的结果感兴趣,并想在通知调用者之前拦截它。也许是这样的:
public Future<Integer> getCalculation() {
Future<Integer> future = realObject.getCalculation();
// Get the result, store it somewhere
// ???
}
如果 getCalculation 是同步的,我可以调用 realObject,等待响应,对它做任何我想做的事情,然后简单地返回它,如下所示:
public int getCalculation() {
int result = realObject.getCalculation();
this.cache = result;
return result;
}
如何将此模式应用于返回 Future 的东西?
【问题讨论】:
-
如果您想在返回之前获取并存储结果,那么使用
Future的意义何在?您不妨现在就返回int。 -
在我的特殊情况下,我想在让客户看到之前捕获结果的副本。我希望以异步方式进行计算,但我希望首先了解结果。
-
对...所以您仍然可以使用 future 来异步它,但是如果您在将结果交给客户端之前捕获结果,您不妨返回 int。我会发布一个答案来尝试澄清这一点。
标签: java multithreading decorator future