zoukankan      html  css  js  c++  java
  • 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);    
                }    
            }    
        
        }    
        
    }    
  • 相关阅读:
    .NET 环境中使用RabbitMQ
    WPF窗口模板——Style样式
    C#获取当前日期时间
    C#解析JSON字符串总结
    c#简单加密和对称加密
    List<T>转换为二维数组
    java后台导出pdf
    C# 创建 读取 更新 XML文件
    python 第三天
    编写登录接口
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/5264795.html
Copyright © 2011-2022 走看看