zoukankan      html  css  js  c++  java
  • 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模式的实现.

      

  • 相关阅读:
    nginx自定义header支持
    使用 navicat 导入导出数据库
    eureka 服务注册与发现
    反射应用之动态代理
    接口应用之“静态代理”
    工厂模式
    计算程序运行的时间(以求得1-10000之间的素数为例)
    抽象类的模板方法设计模式
    ==和equals()方法的区别
    单例设计模式之饿汉式和懒汉式的区别
  • 原文地址:https://www.cnblogs.com/trekxu/p/10332783.html
Copyright © 2011-2022 走看看