你会在App Engine中使用什么“未来”?

时间:2010-03-02 02:13:30

标签: java google-app-engine future

docs中,FutureWrapper的定义如下:

  

FutureWrapper是一个简单的未来   包裹父母未来。

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

1 个答案:

答案 0 :(得分:1)

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

  

Future表示结果   异步计算。方法是   提供检查是否计算   完成,等待它   完成,并检索结果   的计算。结果可以   仅使用方法get检索   当计算完成时,   必要时阻止直到它为止   准备。取消由。执行   取消方法。其他方法   提供是否确定任务   正常完成或被取消。   计算完成后,即可   计算无法取消。如果   你想用Future作为   可取消性但不提供   一个可用的结果,你可以声明类型   表单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类是一个   Future的实施   实现Runnable,也可以   由Executor执行。例如,   以上施工提交   可以替换为:

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

内存一致性效果:操作   由异步计算   happen-before之后的行动   另一个相应的Future.get()   线程。

FutureWrapper只是任何父Future的装饰器。