使用HttpAsyncClient進行異步獲取數據
package com.k.ctc.code.asynchttp;import java.util.concurrent.CountDownLatch; import org.apache.http.HttpResponse; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.HttpGet; import org.apache.http.concurrent.FutureCallback; import org.apache.http.impl.nio.client.CloseableHttpAsyncClient; import org.apache.http.impl.nio.client.HttpAsyncClients;
/**
- @author Kai
- @Date 2016-1-6 11:14:56
@Desc */ public class AsyncClient {
public static void main(String[] args) throws Exception {
// 設置HTTP請求的超時配置 RequestConfig config = RequestConfig.custom().setSocketTimeout(3000).setConnectTimeout(3000).build(); // 根據配置創建異步的HTTP客戶端 CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom().setDefaultRequestConfig(config).build(); //運行客戶端 httpclient.start(); //構建5個HTTPGET請求 HttpGet[] requests = new HttpGet[]{ new HttpGet("https://www.baidu.com/"), new HttpGet("https://www.baidu.com/"), new HttpGet("https://www.baidu.com/"), new HttpGet("https://www.baidu.com/"), new HttpGet("https://www.baidu.com/")}; //創建一個計數器 final CountDownLatch latch = new CountDownLatch(requests.length); //循環請求 for (final HttpGet get : requests) { httpclient.execute(get, new FutureCallback<HttpResponse>() { @Override public void completed(HttpResponse t) { latch.countDown(); System.out.println("=================================="); System.out.println(t.getStatusLine()); } @Override public void failed(Exception excptn) { latch.countDown(); System.out.println("HttpGet failed"); } @Override public void cancelled() { latch.countDown(); System.out.println("HttpGet cancelled"); } }); } //等待5個都請求完成 latch.await(); System.out.println("Shutting down"); //關閉 httpclient.close();
} }</pre>
本文由用戶 gw63 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!