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

      

  • 相关阅读:
    记: Spring Data Jpa @OneToMany 级联查询被动触发的问题
    后端小白的Bootstrap笔记
    最短路径问题
    深度优先搜索 & 广度优先搜索
    检讨书板子
    关于计时器
    博客园美化
    P4819 杀人游戏 (图论 )
    水站 (二分)
    对拍
  • 原文地址:https://www.cnblogs.com/trekxu/p/10332783.html
Copyright © 2011-2022 走看看