java基础-》Future

来源:互联网 发布:淘宝老是要输入验证码 编辑:程序博客网 时间:2024/06/12 20:14

Future代表了异步计算的结果。提供的方法包括:检查计算是否完成;等待计算完成;查询计算结果。计算结果只能通过get方法获取,只有在计算结束时获取,否则会阻塞到它完成为止。通过执行cancel方法可以执行取消操作。又添加了一些方法来判断计算是否正常完成或者是半路取消。一旦计算完成,计算就不能再被取消了。如果你只是为了可取消这个特性使用Future,而不是为了使用它的计算结果。你可以声明Future的特定类型,并且返回空作为底层任务的结果。

interface ArchiveSearcher{

String search(String target);
}
public class App {


ExecutorService executor=null;
ArchiveSearcher searcher=null;
void showSearch(final String target) throws InterruptedException{
Future<String> future=executor.submit(new Callable<String>() {


@Override
public String call() throws Exception {

return searcher.search(target);
}

});

displayOtherThings();//do other things while searching
try{
diplayText(future.get());
}catch(ExecutionException ex){
cleanup();
return;
}

}
private void cleanup() {
// TODO Auto-generated method stub

}
private void diplayText(String string) {
// TODO Auto-generated method stub

}
private void displayOtherThings() {
// TODO Auto-generated method stub

}




FutureTask类是Future类的实现,同时也实现了Runnable接口。所以能被一个Executor执行,所以上述submit那段代码可以被替换为

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


内存一致性效果:异步计算行为在之前开始,另一个线程随后通过Future.get获取结算结果。


0 0