zoukankan      html  css  js  c++  java
  • guava学习--AsyncFunction

     AsyncFuntion接口与之前学习吃的使用Function和Functions进行对象转换有很密切的联系,AsyncFuction接口是Function接口的异步表现,AsyncFuction和Function都需要接收一个input参数,不同的是AsyncFunction接口返回的是 ListenableFuture,当我们需要接收AsyncFunction转换后的结果时,我们需要调用 ListenableFuture.get()方法。

        AsyncFunction接口常被用于当我们想要异步的执行转换而不造成线程阻塞时,尽管Future.get()方法会在任务没有完成时造成阻塞,但 是AsyncFunction接口并不被建议用来异步的执行转换,它常被用于返回Future实例。

    import java.util.concurrent.Callable;

    import java.util.concurrent.ExecutionException;

    import java.util.concurrent.Executors;

    import com.google.common.util.concurrent.AsyncFunction;

    import com.google.common.util.concurrent.Futures;

    import com.google.common.util.concurrent.ListenableFuture;

    import com.google.common.util.concurrent.ListeningExecutorService;

    import com.google.common.util.concurrent.MoreExecutors;

     

    public class AsyncFunctionTest {

     

    private static ListeningExecutorService listeningExecutorService =

    MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(2));

     

    static AsyncFunction<String, String> asyncFunction = new AsyncFunction<String, String>() {

            @Override

    public ListenableFuture<String> apply(final String input) throws Exception {

                return listeningExecutorService.submit(new Callable<String>() {

                    @Override

                    public String call() throws Exception {

                        return input + "101";

                    }

                });

            }

        };

        

        static ListenableFuture<String> lis = listeningExecutorService.submit(new Callable<String>() {

            @Override

            public String call() throws Exception {

                return "张三";

            }

        });

        

        public static void main(String[] args) throws InterruptedException, ExecutionException {

        ListenableFuture<String> lf =

                    Futures.transform(lis, asyncFunction);

        

        System.out.println(lf.get());

        listeningExecutorService.shutdown();

    }

    }

     

  • 相关阅读:
    JVM(一)--Java内存区域
    leetcode33 搜索旋转排序数组
    二叉树的相关算法(一)
    分别求二叉树前、中、后序的第k个节点
    【蓝桥杯】历届试题 买不到的数目
    JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)
    【蓝桥杯】核桃的数量
    Java内存分析之对象实例化操作初步分析
    【蓝桥杯】算法训练 K好数
    【蓝桥杯】基础练习试题
  • 原文地址:https://www.cnblogs.com/fanguangdexiaoyuer/p/6250759.html
Copyright © 2011-2022 走看看