HttpClient连接池使用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();
        }
    }
}

转载于:https://my.oschina.net/UpBoy/blog/650601

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值