3

docs中,FutureWrapper 的定义如下:

FutureWrapper 是一个简单的 Future,它包装了一个父 Future。

什么是未来,为什么需要包装它以及何时在 App Engine 中使用它?

4

1 回答 1

1

这是java.util.concurrent.Future<V>. 链接的 Javadoc 非常清晰,并包含一个示例。对于懒惰的人,这里有一个复制粘贴:

AFuture表示异步计算的结果。提供了检查计算是否完成、等待其完成以及检索计算结果的方法。结果只能get 在计算完成时使用方法检索,必要时阻塞,直到它准备好。取消是通过取消方法执行的。提供了额外的方法来确定任务是正常完成还是被取消。一旦计算完成,就不能取消计算。如果您想使用 aFuture是为了可取消但不提供可用的结果,您可以声明表单的类型并 作为底层任务的结果Future<?>返回。null

示例用法(请注意,以下类都是虚构的。)

 interface ArchiveSearcher { String search(String target); }
 class App {
   ExecutorService executor = ...
   ArchiveSearcher searcher = ...
   void showSearch(final String target)
       throws InterruptedException {
     Future<String> future
       = executor.submit(new Callable<String>() {
         public String call() {
             return searcher.search(target);
         }});
     displayOtherThings(); // do other things while searching
     try {
       displayText(future.get()); // use future
     } catch (ExecutionException ex) { cleanup(); return; }
   }
 }

该类FutureTask是该 implements 的Future实现Runnable,因此可以由Executor. 例如,上面带有 submit 的构造可以替换为:

 FutureTask<String> future =
   new FutureTask<String>(new Callable<String>() {
     public String call() {
       return searcher.search(target);
   }});
 executor.execute(future);  

内存一致性效果:异步计算所采取的 动作发生Future.get()在另一个线程中对应的动作之后。

FutureWrapper只是任何 parent 的装饰器Future

于 2010-03-02T02:18:57.570 回答