`

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);  
                }  
            }  
      
        }  
      
    }  
 
分享到:
评论

相关推荐

    java单线程多线程clientserver

    Java中的单线程和多线程是编程中的关键概念,特别是在服务器端开发中。了解它们的原理和应用对于构建高效、可扩展的客户端-服务器应用至关重要。以下是对这些概念的详细解析。 首先,我们来谈谈单线程。在Java中,...

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

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

    libevent 多线程 HTTP post服务器

    "libevent 多线程 HTTP post服务器" 指的是一种使用libevent库构建的、支持多线程处理HTTP POST请求的服务器。libevent是一个事件通知库,它提供了一种方法来执行非阻塞I/O操作,这对于高性能网络服务器尤其重要。而...

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

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

    支持多线程的SFTP类代码

    适用多线程的SFTP类,支持代理服务器,是spring服务类,无需修改可直接与spring结合使用。 代码经过大量的并发使用验证,稳定可靠。 依赖的jar包如下: &lt;groupId&gt;com.jcraft&lt;/groupId&gt; &lt;artifactId&gt;...

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

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

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

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

    C# UDP多线程发送接收

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

    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加载与卸载、函数调用、线程安全、同步原语使用等多个方面,需要开发者对多线程编程有深入的理解和实践经验。正确地处理这些问题将能充分利用多核处理器的优势,...

    FFmpegH264 多线程 优化

    FFmpeg是一款开源的多媒体处理工具,它包含了各种编解码...在分析和使用提供的压缩包文件"ffmpegH264Opt"时,开发者可以深入研究源代码,理解并学习如何在FFmpeg中实现多线程和硬件优化,以优化自己的多媒体应用程序。

    C# Timer的多线程使用方法

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

    server_and_client.rar_多线程 client

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

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

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

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

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

    C#多线程互斥实例 多线程获取同一变量

    C#语言提供了丰富的多线程支持,让我们能够编写出高效的多线程应用程序。在这个"多线程互斥实例 多线程获取同一变量"的示例中,我们将探讨如何在多个线程中安全地访问共享资源,避免数据不一致性和竞态条件。 首先...

    libevent多线程client、server

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

Global site tag (gtag.js) - Google Analytics