Guava ListenableFuture介绍以及使用
http://www.jianshu.com/p/e3da6d4cd08e
介绍
我们知道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);}