一 .概述
首先我们看看这个接口的定义:
public interface FutureCallback<V> { void onSuccess(@Nullable V result); void onFailure(Throwable t); }
从这个接口之中,我们可以看到,这个就是一个Future的回调接口,并且,我们可以拿到返回这或者异常对象.
二 .绑定FutureCallBack对象
在guava之中出现了一个工具类Futures,它可以帮助我们将FutureCallBack和ListenableFuture进行绑定.
看下面的代码:
public class FutureCallbackTest { public static void main(String[] args) { // 使用MoreExecutors包装器包装一个基本的Executor对象,我们就能获取到一个ListeningExecutorService对象 ListeningExecutorService executorService = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(2)); ListenableFuture<String> listenableFuture = executorService.submit(new Callable<String>() { @Override public String call() throws Exception { TimeUnit.SECONDS.sleep(3); return "trek"; } }); Futures.addCallback(listenableFuture, new FutureCallback<String>() { @Override public void onSuccess(String result) { System.out.println("获取future的执行结果=="+result); } @Override public void onFailure(Throwable t) { t.printStackTrace(); } }); System.out.println("主线程执行完毕"); } }
我们通过Futures工具类,将一个Future对象和一个FutrureCallBack进行了绑定,实现了我们的listener模式的实现.