Apache HttpClient Fluent API:在后台线程中异步执行多个请求

来源:互联网 发布:sqlserver 别名 编辑:程序博客网 时间:2024/05/30 20:08
完整代码:
package com.struts2.demo;import org.apache.http.client.fluent.Async;import org.apache.http.client.fluent.Content;import org.apache.http.client.fluent.Request;import org.apache.http.concurrent.FutureCallback;import java.util.LinkedList;import java.util.Queue;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;/** * 在后台线程中异步执行多个请求 * Created by Frank on 2014/6/6. */public class FluentAsync {    public static void main(String[] args) {        Request[] requests = new Request[]{                Request.Get("http://www.baidu.com/"),                Request.Get("http://www.yahoo.com/"),                Request.Get("http://www.apache.com/"),                Request.Get("http://www.apple.com/")        };        Queue<Future<Content>> queue = new LinkedList<>();        /**         * 异步执行GET请求         */        ExecutorService es = Executors.newFixedThreadPool(4);        Async async = Async.newInstance().use(es);        for (final Request request : requests) {            Future<Content> future = async.execute(request, new FutureCallback<Content>() {                @Override                public void completed(Content content) {                    System.out.println(System.currentTimeMillis() + " Request completed: " + request);                }                @Override                public void failed(Exception e) {                    System.out.println(e.getMessage() + ": " + request);                }                @Override                public void cancelled() {                    System.out.println("Request cancelled: " + request);                }            });            queue.add(future);        }        Future<Content> future;        while ((future = queue.poll()) != null) {            if (future.isDone()) {                if (!future.isCancelled()) {                    try {                        future.get();                    } catch (InterruptedException e) {                        Thread.currentThread().interrupt();                        future.cancel(true);                    } catch (ExecutionException e) {                        System.out.println(e.getMessage());                    }                }            } else {                queue.add(future);            }        }        System.out.println("done");        es.shutdown();    }}
0 0
原创粉丝点击