繁体   English   中英

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

[英]What would you use a “Future” for in App Engine?

文档中 ,FutureWrapper的定义如下:

FutureWrapper是一个包含父Future的简单Future。

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

这是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); 

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

FutureWrapper只是任何父级Future的装饰者。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM