Apache HttpClient Fluent API:在后台线程中异步执行多个请求
2014-06-06 18:13
656 查看
完整代码:
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(); } }
相关文章推荐
- Java用org.apache.http.client的HttpClient发送Post请求 可获取返回Header
- Android Asynchronous Http Client-Android异步网络请求客户端接口
- Android Asynchronous Http Client-Android异步网络请求客户端接口
- java apache commons HttpClient发送get和post请求的学习整理(转)
- js方法内Ajax请求数据判断,验证无效(OnClientClick="return Method();"),还是直接执行后台代码
- WPF多线程(后台线程_和异步执行)
- Android使用Apache HttpClient发送GET、POST请求
- Android Asynchronous Http Client-Android异步网络请求客户端接口(转)
- Java模拟HTTP的Get和Post请求(增强) Apache-httpclient
- 安卓应用的HTTP请求方式:Apache HTTP Client和HttpURLConnection
- 模拟发起http请求类库 org.apache.commons.httpclient
- Android Asynchronous Http Client-Android异步网络请求客户端接口
- Android Asynchronous Http Client-Android异步网络请求客户端接口
- Android Asynchronous Http Client-Android异步网络请求客户端接口
- Java--org.apache.http.client的HttpClient发送Post请求,获取返回Header
- Android-网络请求数据使用apache httpclient v4
- HttpClient Fluent API 的使用
- 【Objective-C】Http常用API、同步请求与异步请求
- Java用org.apache.http.client的HttpClient发送Post请求
- Android Asynchronous Http Client-Android异步网络请求客户端接口