Future模式
让run方法有结果??
Future可以拿到异步执行任务的返回值。
- allAsList:对多个ListenableFuture的合并,返回一个当所有Future成功时返回多个Future返回值组成的List对象。注:当其中一个Future失败或者取消的时候,将会进入失败或者取消。
- successfulAsList:和allAsList相似,唯一差别是对于失败或取消的Future返回值用null代替。不会进入失败或者取消流程。
- immediateFuture/immediateCancelledFuture: 立即返回一个待返回值的ListenableFuture。
主要接口为ListenableFuture,并借助于Futures静态扩展。
继承至Future的ListenableFuture,允许我们添加回调函数在线程运算完成时返回值或者方法执行完成立即返回。
对ListenableFuture添加回调函数:
Futures.addCallback(ListenableFuture<V>, FutureCallback<V>, Executor)
http://blog.51cto.com/lavasoft/115112 51CTO
提交到线程池(不知道什么时候执行但一定会执行)
ListenableFuture<HotelDetailModel> task = executorService.submit(new HotelDetailTask(hotelDetailParam));
添加回调的意思就是指定任务执行后要做的事情(执行成功怎么怎么样,执行失败怎么怎么样)
// 添加回调, 将接口放回的LowestPriceBo 放入共享的list中
Futures.addCallback(task, new FutureCallback<HotelDetailModel>() {
@Override
public void onSuccess(HotelDetailModel result) {
if (result != null) {
for (PriceInfoModel item : result.getPriceInfos()) {
tempPriceList.add(item);
}
}
}
@Override
public void onFailure(Throwable t) {
}
});
新生的小心情