`

Guava包的ListenableFuture解析

    博客分类:
  • java
 
阅读更多
package com.downjoy.test.guava.concurrency;

import com.downjoy.test.guava.GuavaBase;
import com.google.common.util.concurrent.*;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

/**
 * DESCRIPTION.
 *
 * @author Jonathan L.(xingbing.lai@downjoy.com)
 * @version 1.0.0 -- Datetime: 16-8-25 上午10:27
 */
public class ListenableFutureTest extends GuavaBase {

    public static void main(String[] args) throws InterruptedException {
        final ExecutorService pool = Executors.newFixedThreadPool(10);

//        // JDK
//        Future<String> future = pool.submit(new Callable<String>() {
//            public String call() throws Exception {
//                return "D.CN";
//            }
//        });
//
//        try {
//            String name = future.get();
//            print(name);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }

        // Guava
        ListeningExecutorService executorService = MoreExecutors.listeningDecorator(pool);
        ListenableFuture futureTask = executorService.submit(new Callable() {
            @Override
            public Object call() throws Exception {
                return "D.CN";
            }
        });
//        // 运行监控,可以不加
//        futureTask.addListener(new Runnable() {
//            @Override
//            public void run() {
//                print("Game Over !!!");
//            }
//        }, executorService);

        FutureCallbackImpl callback = new FutureCallbackImpl();
        Futures.addCallback(futureTask, callback);
        print(callback.getCallbackResult());

        Thread.sleep(2000);
        pool.shutdown();
    }

    private static class FutureCallbackImpl implements FutureCallback<String> {
        StringBuilder builder = new StringBuilder("结果加点东西>>>");

        @Override
        public void onSuccess(String result) {
            print("success:" + result);
            builder.append(result);
        }

        @Override
        public void onFailure(Throwable t) {
            print("failure:" + t.getMessage());
        }

        public String getCallbackResult(){
            return builder.toString();
        }
    }
}


参考:http://ifeve.com/google-guava-listenablefuture/
分享到:
评论

相关推荐

    Guava Source Code 22.0

    《深入解析Guava 22.0源代码》 Guava是谷歌提供的一个Java核心类库,它在Java社区中有着广泛的应用,特别是在大型项目和复杂系统中。Guava 22.0版本是对该库的一次重大更新,对原有功能进行了优化,同时也引入了...

    guava-19.0-src

    《深入解析Guava库:基于guava-19.0-src源码分析》 Guava是Google开源的一个Java库,其版本号为19.0的源码为我们提供了深入了解这个强大工具集的机会。Guava提供了许多核心库的功能,包括集合、缓存、原生类型支持...

    guava-api16/17/18chm

    《Guava API 16/17/18 深度解析》 Guava是Google推出的一个Java库,它包含一系列高效的、经过充分测试的、用于解决常见编程问题的工具类。Guava API 16/17/18版本的发布,为开发者提供了更加丰富和强大的功能。本文...

    Google+Guava+官方教程+-+v1.1.rar

    以下是对Guava库中主要特性和功能的详细解析。 一、集合框架扩展 Guava提供了丰富的集合类扩展,如Multiset(多集,允许元素重复并记录出现次数)、Multimap(多映射,一个键可以对应多个值)、Immutable集合(不...

    Java网络爬虫jar包

    Java提供了线程池(`java.util.concurrent.ExecutorService`)来管理和调度任务,或者使用第三方库如Apache Commons Pool或Guava的`ListenableFuture`。 6. **延迟加载与JavaScript执行**: 许多现代网站使用...

    爬虫javaDemo

    Java 8引入的CompletableFuture或第三方库如Guava的ListenableFuture可以实现这一点。 二、Java爬虫核心组件 1. **URL管理器**:用于存储已访问和待访问的URL,防止重复抓取,同时控制抓取深度。 2. **下载器**:...

    经常用到的jar包2

    5. **线程并发库**:如`Guava`中的`ListenableFuture`或`CompletableFuture`,它们提供了高级的并发操作,帮助开发者编写更高效的多线程代码。 6. **缓存库**:例如`Ehcache`或`Redis`客户端,可以提高数据访问速度...

    cnGuava:guava 中文注释

    本文将深入探讨Guava的核心概念和功能,并结合中文注释进行解析。 1. **集合框架**:Guava扩展了Java的集合框架,提供了如Multiset(多集)、Multimap(多映射)、ImmutableList(不可变列表)、ImmutableSet(不可...

    爬虫教程文档

    - **Google Guava ListeningExecutorService**: Google提供的高级多线程工具包,简化了异步任务的处理流程。 4. **Maven项目管理** - **作用**:Maven是一个项目管理和综合工具,可以自动化构建项目,管理依赖...

    custom_queue:通用对象的自定义队列实现

    Google的异步库,如Guava的ListenableFuture或者Android的AsyncTask,提供了异步编程的支持。在队列操作中,异步处理可以提高系统性能,尤其是在处理大量数据或者I/O密集型操作时。通过异步插入或删除队列元素,主线...

Global site tag (gtag.js) - Google Analytics