使用HttpAsyncClient進行異步獲取數據

gw63 8年前發布 | 1K 次閱讀 Java Android

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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!