Future<V> 接口
public interface Future<V>
泛型参数
V : Future接口中get()
方法返回的结果。
简述
Future表示的是异步计算的结果。接口本身提供了很多方法,如:
- 检测计算是否完成
isDone()
- 等待计算完成,然后检索计算结果
get()
异步计算完成后,计算结果只能通过调用get()
方法检索获取。如果需要等待一段时间之后,再来获取计算结果,可以使用get(long timeout, TimeUnit unit)
。
如果想要取消正在执行的计算,需要调用取消方法-cancel(bool mayInterruptIfRunning)
。如果异步计算已经完成,计算就不能被取消。Future还提供了其他方法来确定异步计算是否已正常完成-isDone()
或已被取消-isCancelled()
。如果仅仅为了使用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
FutureTask实现了Runnable和Future接口,因此FutureTask可以由执行器执行。
例如,上面代码中submit
构造参数代码可以用下面的代码替代。代码如下:
FutureTask<String> future =
new FutureTask<String>(new Callable<String>() {
public String call() {
return searcher.search(target);
}});
executor.execute(future);
网友评论