022 FutureCallback

一 .概述

  首先我们看看这个接口的定义:  

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模式的实现.

  

原文地址:https://www.cnblogs.com/trekxu/p/10332783.html