使用PoolingHttpClientConnectionManager解决httpclient的多线程请求问题

直接上代码

1.主程序

public class TestMain {

    public static void main(String[] args) throws NSQException, TimeoutException {
        ExecutorService pool = Executors.newCachedThreadPool();
        // http请求
        PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
        cm.setDefaultMaxPerRoute(800);// 设置每个路由基础的连接
        cm.setMaxTotal(1000);//设置最大连接数//cm.setMaxPerRoute(new HttpRoute(httpHost), maxRoute);// 设置目标主机的最大连接数
        CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm).build();
        for (int i = 0; i < 1000; i++) {
            TestRunnable tmp = new TestRunnable(httpClient);
            new Thread(tmp).start();
        }
        
    }
}

2.线程使用httpclient进行post请求,其中调用的post请求具体实现已经做了封装,可参考我之前的文章

class TestRunnable implements Runnable {
    private final CloseableHttpClient httpclient;

    public TestRunnable(CloseableHttpClient httpClient) {
        this.httpclient = httpClient;
    }

    @Override
    public void run() {
        String id = "444";
        String name = "testName";
        Map<String, String> param = new HashMap<String, String>();
        param.put("id", id);
        param.put("name", name);

        String result = HttpClientUtil.doHttpPost("http://ip:port/testapi", param,httpclient);
        System.out.println(result);
    }
    
}

 

posted @ 2018-05-18 15:15  一问三不知。  阅读(16253)  评论(0编辑  收藏  举报