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

      

  • 相关阅读:
    Livepool
    Eclipse最新版注释模板设置详解
    hashcode详解
    开发集成工具MyEclipse中Outline的问题
    第三章 数据链路层(二)
    Java常考面试题(四)
    collections集合的总括。
    第三章 数据链路层(一)
    Java常考面试题(三)
    Java常考面试题(二)
  • 原文地址:https://www.cnblogs.com/trekxu/p/10332783.html
Copyright © 2020-2023  润新知