介绍
我们知道java中的Future表示一个异步计算任务,当任务完成时可以得到计算结果,如果我们希望一旦计算完成就拿到结果展示给用户或者做计算,就必须使用另一个线程不断的查询计算状态,这样会使代码复杂而且效率低下。使用guava的ListenableFuture可以帮我们检测Future是否完成了,如果完成就会自动调用回调函数,这样可以减少并发程序的复杂度。
使用示例
public static void main(String[] args) {
ListeningExecutorService executorService = MoreExecutors.listeningDecorator(Executors.newCachedThreadPool());
// 执行任务
final ListenableFuture<Integer> listenableFuture = executorService.submit(new Callable<Integer>() {
public Integer call() throws Exception {
System.out.println("新任务。。。");
TimeUnit.SECONDS.sleep(1);
return 7;
}
});
// 任务完成回掉函数
final FutureCallback<Integer> futureCallback = new FutureCallback<Integer>() {
@Override
public void onSuccess(Integer result) {
System.out.println("任务执行成功,对任务进行操作。");
}
@Override
public void onFailure(Throwable t) {
System.out.println("任务执行失败。");
}
};
// 绑定任务以及回调函数
Futures.addCallback(listenableFuture, futureCallback);
}
网友评论