• 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);    
                }    
            }    
        
        }    
        
    }    
  • 相关阅读:
    【工业控制】What is a Waveform
    【工业控制】什么是波形
    【工业控制】学习喷墨打印技术 怎么能不知道波形
    【工业控制】UV打印机喷头波形和墨水关系
    VMware-workstation-full序列码
    【Centos】Centos7.5取消自动锁屏功能
    微信公众平台开发入门教程(图文)
    微信公众平台开发(34)微相册
    微信公众平台开发(33)在线点歌/在线音乐
    微信公众平台开发(32)快递物流
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/5264795.html
Copyright © 2020-2023  润新知