`

httpclient 多线程执行(网上版本太多了。。。误人子弟)

 
阅读更多

The Commons HttpClient project is now end of life, and is no longer being developed. It has been replaced by the Apache HttpComponents project in its HttpClient and HttpCore modules, which offer better performance and more flexibility.

 

commons httpClient在2011年的3.11就结束了;被拆分成了 HttpClient and HttpCore 2个模块;
因此MultiThreadedHttpConnectionManager早就废弃了;网上众多真是误人子弟
最新API为4.5;

 

 

2.4. Multithreaded request execution  多线程请求执行;
When equipped with a pooling connection manager such as PoolingClientConnectionManager, HttpClient can be used to execute multiple requests simultaneously using multiple threads of execution.
当配有池连接的管理器如poolingclientconnectionmanager,HttpClient可以用多线程来执行多个请求同时使用。
The PoolingClientConnectionManager will allocate connections based on its configuration. If all connections for a given route have already been leased, a request for a connection will block until a connection is released back to the pool. One can ensure the connection manager does not block indefinitely in the connection request operation by setting 'http.conn-manager.timeout' to a positive value. If the connection request cannot be serviced within the given time period ConnectionPoolTimeoutException will be thrown.
的poolingclientconnectionmanager将分配基于其配置连接。如果一个给定路由的所有连接已经被租用时,新一个连接的请求将被阻止,直到一个连接被释放回池。
如果想让连接管理器不会无限期阻塞的新进来的连接请求,那么给http.conn-manager.timeout' 设置一个值,
如果连接请求不能被服务在给定的时间范围内,connectionpooltimeoutexception异常将被抛出。

While HttpClient instances are thread safe and can be shared between multiple threads of execution, it is highly recommended that each thread maintains its own dedicated instance of HttpContext .

虽然HttpClient实例是线程安全的和可执行的多个线程之间共享,但是HttpContext实例则不是这样,强烈建议每个线程维护自己专用的HttpContext实例。

 

 

 

 

 

PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
CloseableHttpClient httpClient = HttpClients.custom()
        .setConnectionManager(cm)
        .build();

// URIs to perform GETs on
String[] urisToGet = {
    "http://www.domain1.com/",
    "http://www.domain2.com/",
    "http://www.domain3.com/",
    "http://www.domain4.com/"
};

// create a thread for each URI
GetThread[] threads = new GetThread[urisToGet.length];
for (int i = 0; i < threads.length; i++) {
    HttpGet httpget = new HttpGet(urisToGet[i]);
    threads[i] = new GetThread(httpClient, httpget);
}

// start the threads
for (int j = 0; j < threads.length; j++) {
    threads[j].start();
}

// join the threads
for (int j = 0; j < threads.length; j++) {
    threads[j].join();
}

 

 

 

 

static class GetThread extends Thread {

    private final CloseableHttpClient httpClient;
    private final HttpContext context;
    private final HttpGet httpget;

    public GetThread(CloseableHttpClient httpClient, HttpGet httpget) {
        this.httpClient = httpClient;
        this.context = HttpClientContext.create();
        this.httpget = httpget;
    }

    @Override
    public void run() {
        try {
            CloseableHttpResponse response = httpClient.execute(
                    httpget, context);
            try {
                HttpEntity entity = response.getEntity();
            } finally {
                response.close();
            }
        } catch (ClientProtocolException ex) {
            // Handle protocol errors
        } catch (IOException ex) {
            // Handle I/O errors
        }
    }

}

 

分享到:
评论

相关推荐

    httpclient多线程下载(分段下载)实践

    本篇文章将深入探讨如何使用HTTPClient进行多线程分段下载的实践。 首先,我们要理解多线程下载的基本原理。多线程下载是通过将大文件分割成多个小段,每个线程负责下载一个或多个段,这样可以充分利用多核处理器的...

    httpclient著名的多线程框架

    在Android系统中,由于主线程不能执行耗时操作,否则会引发ANR(Application Not Responding)错误,因此利用HttpClient的多线程特性,可以将网络请求放到后台线程,保证UI的流畅性。 HttpClient的使用步骤通常包括...

    用HttpClient写了一个多线程下载软件

    标题中的“用HttpClient写了一个多线程下载软件”意味着我们将探讨如何使用Apache HttpClient库来创建一个支持多线程的文件下载应用。HttpClient是一个强大的Java库,它提供了丰富的HTTP客户端功能,包括请求发起、...

    android 学习笔记6-HttpClient 多线程下载 断点续传 进度条 源码关联

    4、多线程下载:使用RandomAccessFile输出流写 5、多线程下载-断点续传:使用临时文件记录当前下载的数据,下次读取文件开始下载 6、下载显示进度条-ProgressBar 7、在gitbub上面下载已经有支持断点续传功能的代码...

    HttpClient+ Spring实现多线程

    注意在并发环境中,必须确保HttpClient的线程安全,例如,避免在多个线程之间共享同一个HttpClient实例,而是为每个请求创建新的HttpClient,或者使用连接池来复用连接。 总的来说,HttpClient与Spring的结合使得在...

    使用java的HttpClient实现多线程并发

    通过使用HttpClient的连接池和多线程,我们可以有效地并发执行HTTP GET请求,同时控制并发数量,避免过多的网络连接导致服务器压力过大。这种方式提高了请求效率,减少了资源消耗,并且遵循了最佳实践。

    httpclient工具

    本文将详细讲解如何使用HTTPClient进行POST请求,并探讨在多线程环境下的应用,以及与"Grabticket"这个场景相关的实践。 HTTPClient是由Apache基金会开发的一个开源库,它提供了强大的功能来执行HTTP请求,包括GET...

    使用Apache HttpClient实现多线程下载的小例子

    在这个小例子中,我们将讨论如何利用HttpClient实现多线程下载,以提高文件下载效率。 首先,我们需要在项目中引入Apache HttpClient的相关依赖。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml ...

    Common-httpClient各个版本jar及源码

    用快压解压 Common-httpClient各个版本jar及源码

    HttpClient4.2.1版本的Jar包

    3. **多路复用**:虽然HttpClient 4.2.1版本不直接支持HTTP/2,但它的连接池和请求执行器设计使得在升级到支持HTTP/2的版本时更为平滑。HTTP/2的多路复用特性可以通过连接池得到部分实现,允许多个请求共享同一个TCP...

    HttpClient包(包含3.0/4.0版本)

    Apache HttpClient 是一个强大的Java库,用于执行HTTP请求。它提供了高度可配置的接口,使得开发者可以灵活地控制HTTP通信过程,包括GET、POST以及其他HTTP方法的实现,支持Cookie管理、重定向处理、身份验证等复杂...

    c#异步多线程http文件分块断点续传下载工具

    在C#中,我们可以使用`System.Net.WebClient`类或者自定义`HttpClient`实例来实现多线程下载。 异步编程是现代C#的一个重要特性,它允许我们在等待IO操作完成时,不阻塞主线程,提高程序的响应性。在下载工具中,...

    HttpClient jar包(新旧版本)

    本资源中包括新旧版本的HttpClient的jar包,主要包含httpclient-4.5.3.jar、commons-httpclient-3.1.jar、commons-codec-1.9.jar等总计12个jar包文件

    httpclient 老版本依赖的jar包

    httpclient 老版本依赖的jar包 包含三个文件:commons-codec-1.3.jar,commons-httpclient-3.0.jar,commons-logging-1.0.4.jar,

    HttpClient下载数据

    HttpClient下载数据 图片,string 使用get请求数据

    httpclient.jar4.4及4.5版本和httpcore.jar和commons-logging.jar.rar

    HTTPClient是Apache软件基金会开发的一个Java库,用于执行HTTP请求。这个库被广泛应用于各种Java应用程序,特别是需要与Web服务器进行交互的场景。在你提到的压缩包中,包含了HTTPClient的4.4和4.5两个版本,以及...

    commons-httpclient.rar

    然而,需要注意的是,随着Java社区的发展,现在Spring框架中的RestTemplate和最新的HttpClient(Java 11及更高版本)已经成为了更推荐的选择,尽管如此,Apache Commons HttpClient仍是一个值得学习和理解的优秀库,...

    httpclient4.2.1.zip

    1. **多线程支持**:HttpClient 4.2.1支持多线程并发请求,可以高效地处理大量并发连接,提升了处理能力。 2. **连接管理**:它提供了连接池管理,允许重用已建立的TCP连接,减少网络延迟,提高整体性能。 3. **...

    commons-httpclient-3.1jar包

    4. 并发处理:在多线程环境中,需正确管理和同步HttpClient实例。 总的来说,Apache Commons HttpClient 3.1是Java开发中处理HTTP通信的强大工具,虽然现在已经有了更新的版本,但3.1版本在许多项目中仍被广泛使用...

    多线程网络下载 经典案例源代码

    HttpClient多线程网络下载 经典案例源代码

Global site tag (gtag.js) - Google Analytics