在docs中,FutureWrapper 的定义如下:
FutureWrapper 是一个简单的 Future,它包装了一个父 Future。
什么是未来,为什么需要包装它以及何时在 App Engine 中使用它?
在docs中,FutureWrapper 的定义如下:
FutureWrapper 是一个简单的 Future,它包装了一个父 Future。
什么是未来,为什么需要包装它以及何时在 App Engine 中使用它?
这是java.util.concurrent.Future<V>
. 链接的 Javadoc 非常清晰,并包含一个示例。对于懒惰的人,这里有一个复制粘贴:
A
Future
表示异步计算的结果。提供了检查计算是否完成、等待其完成以及检索计算结果的方法。结果只能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
。