`

ThreadSafeClientConnManager用来支持多线程的使用http client

 
阅读更多

    import org.apache.http.HttpEntity;  
    import org.apache.http.HttpResponse;  
    import org.apache.http.client.HttpClient;  
    import org.apache.http.client.methods.HttpGet;  
    import org.apache.http.impl.client.DefaultHttpClient;  
    import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;  
    import org.apache.http.protocol.BasicHttpContext;  
    import org.apache.http.protocol.HttpContext;  
    import org.apache.http.util.EntityUtils;  
      
    /** 
     * An example that performs GETs from multiple threads. 
     * 
     */  
    public class ClientMultiThreadedExecution {  
      
        public static void main(String[] args) throws Exception {  
            // Create an HttpClient with the ThreadSafeClientConnManager.  
            // This connection manager must be used if more than one thread will  
            // be using the HttpClient.  
            ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager();  
            cm.setMaxTotal(100);  
      
            HttpClient httpclient = new DefaultHttpClient(cm);  
            try {  
                // create an array of URIs to perform GETs on  
                String[] urisToGet = {  
                    "http://hc.apache.org/",  
                    "http://hc.apache.org/httpcomponents-core-ga/",  
                    "http://hc.apache.org/httpcomponents-client-ga/",  
                    "http://svn.apache.org/viewvc/httpcomponents/"  
                };  
      
                // 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, i + 1);  
                }  
      
                // 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();  
                }  
      
            } finally {  
                // When HttpClient instance is no longer needed,  
                // shut down the connection manager to ensure  
                // immediate deallocation of all system resources  
                httpclient.getConnectionManager().shutdown();  
            }  
        }  
      
        /** 
         * A thread that performs a GET. 
         */  
        static class GetThread extends Thread {  
      
            private final HttpClient httpClient;  
            private final HttpContext context;  
            private final HttpGet httpget;  
            private final int id;  
      
            public GetThread(HttpClient httpClient, HttpGet httpget, int id) {  
                this.httpClient = httpClient;  
                this.context = new BasicHttpContext();  
                this.httpget = httpget;  
                this.id = id;  
            }  
      
            /** 
             * Executes the GetMethod and prints some status information. 
             */  
            @Override  
            public void run() {  
      
                System.out.println(id + " - about to get something from " + httpget.getURI());  
      
                try {  
      
                    // execute the method  
                    HttpResponse response = httpClient.execute(httpget, context);  
      
                    System.out.println(id + " - get executed");  
                    // get the response body as an array of bytes  
                    HttpEntity entity = response.getEntity();  
                    if (entity != null) {  
                        byte[] bytes = EntityUtils.toByteArray(entity);  
                        System.out.println(id + " - " + bytes.length + " bytes read");  
                    }  
      
                } catch (Exception e) {  
                    httpget.abort();  
                    System.out.println(id + " - error: " + e);  
                }  
            }  
      
        }  
      
    }  
 
分享到:
评论

相关推荐

    使用TCPServer编写(多线程)socket服务

    因此,通常我们会使用多线程来为每个连接创建一个独立的工作线程,让每个线程独立处理客户端的请求,从而提高服务器的并发处理能力。 编写多线程的TCPServer,首先需要导入必要的库,如Python中的`socket`和`...

    基于mongoose实现Http Server(多线程)

    本文将详细介绍如何使用mongoose库创建一个支持多线程的HTTP服务器,并探讨相关技术要点。 **mongoose库介绍** mongoose是一个轻量级的C语言库,用于构建嵌入式Web服务器。它具有易于使用的API,支持多种HTTP特性...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例),可直接运行

    在.NET框架中,C#语言提供了强大的多线程支持,使得开发者可以充分利用现代多核处理器的优势,实现并行处理和高效能编程。本资源包含六个C#.NET多线程的实例,涵盖了多线程的基本使用到更高级的概念,如线程互斥。...

    C# UDP多线程发送接收

    2. 需要注意同步问题,避免发送线程和接收线程同时访问UdpClient实例,可以使用锁或其他同步机制。 五、C# UDP多线程接收 1. 创建接收线程,持续监听特定端口,接收到数据后进行处理。 2. 接收线程通常采用循环结构...

    tcp client简单实例 连接,发送接收断开,多线程

    在这个“tcp client简单实例 连接,发送接收断开,多线程”中,我们将探讨如何使用编程实现一个简单的TCP客户端,特别关注多线程的应用。 首先,TCP客户端的基本工作流程包括以下几个步骤: 1. **建立连接**:...

    c/c++ 记录日志,支持windows和linux,支持多线程

    打日志用的,经过了windows和linux下的测试,支持多线程,附上了实例,此实例在windows下运行只要加到win32控制台程序里就行了,记得去掉预编译头,在linux下测试,只要make 就行了,makefile已经在压缩包里了

    CURL多线程类库

    1. **基本使用**:展示如何创建一个CURL多线程实例,添加请求并执行。 2. **并发控制**:如何设置最大并发数,避免过度消耗系统资源。 3. **错误处理**:处理请求过程中可能出现的错误,如网络连接问题、超时等。 4....

    qt websocket 客户端 多线程使用

    异步链接,并且放入到线程中去执行,线程池的基础,代码使用两个用户,放入到一个线程中执行,同理,可以多个用户放入到多个线程中执行,为线程池执行websocket client 打下了基础。

    delphi多线程调用dll

    综上所述,Delphi多线程调用DLL涉及到了线程创建、DLL加载与卸载、函数调用、线程安全、同步原语使用等多个方面,需要开发者对多线程编程有深入的理解和实践经验。正确地处理这些问题将能充分利用多核处理器的优势,...

    C#的日志类,支持多线程调用

    一个C#的日志类,支持多线程调用 经过10000线程并发测试未发现问题

    稳定、方便、实用的VB6多线程技术(附老马的ActiveX多线程示例)

    VB6虽然相对老旧,但其支持的多线程功能依然具有实用性,尤其是在处理耗时操作或需要并发执行任务的应用场景。 VB6中的多线程主要通过两种方式实现:一是使用Microsoft的ActiveX EXE组件,二是通过API函数进行底层...

    C# Timer的多线程使用方法

    总结来说,C#的Timer类提供了灵活的方式来实现在多线程环境下的定时任务,理解它们的工作原理和使用方式对于编写高效、可靠的后台服务或UI交互至关重要。通过实践,你可以更好地掌握这些知识,并在你的项目中...

    java多线程Client/Server程序

    在Java编程领域,多线程Client/Server程序是网络编程中的一个重要组成部分,它允许服务器同时处理多个客户端的请求。在本程序中,`ChatServer.java` 和 `ChatClient.java` 文件可能分别代表了服务器端和客户端的核心...

    server_and_client.rar_多线程 client

    标题中的"server_and_client.rar_多线程 client"表明这是一个关于多线程客户端与服务器交互的项目。在IT行业中,多线程技术是构建高效、响应迅速的应用程序的关键,尤其在处理并发用户请求时,如在线聊天室。下面将...

    基于boost的http客户端,支持多线程下载

    本项目专注于构建一个基于Boost库的HTTP客户端,它不仅支持基本的HTTP方法如GET、POST和HEAD,还具有多线程下载的能力,以实现高效的资源获取。让我们深入探讨这个项目所涉及的关键技术点。 首先,Boost是一个流行...

    QT多线程Http源码

    QT库,一个跨平台的应用开发框架,提供了丰富的多线程支持和HTTP协议处理功能。本文将深入探讨如何在QT中实现多线程HTTP下载,以实现同时下载不同地址的多个资源。 首先,我们需要了解QT中的多线程机制。QT主要通过...

    delphi7 多线程测试(40个线程)

    在编程领域,多线程是一种常见且强大的技术,它允许程序同时执行多个任务,从而提高效率和响应性。本主题聚焦于Delphi 7中实现的多线程测试,特别是涉及40个并发线程的情况。Delphi是Embarcadero开发的一款集成开发...

    libevent多线程client、server

    libevent,多线程,client,serverlibevent多线程, 参考mariotcp 参考http://blog.csdn.net/i_am_jojo/article/details/7587838流程图

    12.1 Qt5多线程:多线程及简单实例

    在编程领域,尤其是在开发高效、响应迅速的应用程序时,多线程技术扮演着至关重要的角色。Qt5框架提供了一种方便的方式来实现多线程,它允许开发者在不同的...正确理解和使用多线程能够提升应用程序的性能和用户体验。

    C# 多线程实例多线程实例多线程实例

    在编程领域,多线程是实现并发执行任务的关键技术,特别是在C#这样的语言中,它提供了丰富的多线程支持。本文将深入探讨C#中的多线程实例,以帮助开发者理解如何有效地利用多核处理器资源,提高程序的执行效率。 多...

Global site tag (gtag.js) - Google Analytics