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();

    }

    }

     

  • 相关阅读:
    《C++标准程序库》 第6章 STL Container
    《C++语言99个常见编程错误》
    单例模式
    《C++标准程序库》 第7章 Iterator Adapters
    Shell颜色封装(C++)
    《改善C++程序的150个建议》
    OpenCV之图片的创建、保存和复制
    XMLDOM对象方法:对象事件
    三国中最精辟的十句话
    中国十大名茶及鉴别方法
  • 原文地址:https://www.cnblogs.com/fanguangdexiaoyuer/p/6250759.html
Copyright © 2011-2022 走看看