Http Client接続池使用demo


以下はHttpClient接続プールのテストコードです。以下の初歩的な結論を得ました。
1、接続池の管理設定全体の接続数、
2、接続池管理はドメイン名によって接続数を個別に設定でき、接続数は全体のリンク数より小さい。
3、ドメイン名の下の住所がない場合は、そのドメイン名の下のリンク数を記入します。
4、http応答が終了したら、自動的にリンクを返却し、他の要求は直接にリンクを取得して使用する。
次のステップ
1、リンクタイムアウト異常メカニズムを設定し、タイムアウトリンクを解放する
2、httpリンク自動再試行メカニズム 
3、深入りし続ける
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;

import java.io.IOException;

/**
 * Created by shuangjun.yang on 2016/3/30.
 * httpclient      
 */
public class HttpPoolTest {
    public static void main(String[] args) throws IOException {
        PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager();
        poolingHttpClientConnectionManager.setMaxTotal(10);             //        
        poolingHttpClientConnectionManager.setDefaultMaxPerRoute(5);    //          ,
        CloseableHttpClient httpClient = HttpClients.custom()
                .setConnectionManager(poolingHttpClientConnectionManager)
                .build();
        HttpGet httpGet = new HttpGet("http://www.begincode.net");
        HttpGet httpGet1 = new HttpGet("http://www.begincode.net/blogComment/blogId/95");
        new HttpThread(httpClient,httpGet,"1").start();
        System.out.println("Thread 1");
        new HttpThread(httpClient,httpGet1,"2").start();
        System.out.println("Thread 2");
        new HttpThread(httpClient,httpGet1,"3").start();
        System.out.println("Thread 3");
        new HttpThread(httpClient,httpGet1,"4").start();
        System.out.println("Thread 4");
        new HttpThread(httpClient,httpGet1,"5").start();
        System.out.println("Thread 5");
        new HttpThread(httpClient,httpGet1,"6").start();
        System.out.println("Thread 6");
        new HttpThread(httpClient,httpGet1,"7").start();
        System.out.println("Thread 7");
    }


}

class HttpThread extends Thread {
    HttpGet httpGet;
    CloseableHttpClient closeableHttpClient;
    HttpClientContext httpClientContext;
    String flag;

    public HttpThread(CloseableHttpClient closeableHttpClient, HttpGet httpGet,String flag) {
        this.closeableHttpClient = closeableHttpClient;
        this.httpGet = httpGet;
        this.httpClientContext = HttpClientContext.create();
        this.flag = flag;
    }

    @Override
    public void run() {
        try {
            CloseableHttpResponse response = closeableHttpClient.execute(
                httpGet, httpClientContext);
            try {
                System.out.println("  "+flag);
                //      
                HttpEntity entity = response.getEntity();
                System.out.println("  "+flag+"  ");
                //            
                //System.out.println(EntityUtils.toString(entity));
                Thread.sleep(10000);
                System.out.println("  "+flag);
            }catch (InterruptedException e){
                e.printStackTrace();
            }finally {
                //    
                response.close();
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}