当前位置: 代码迷 >> Web前端 >> ThreadSafeClientConnManager用以支持多线程的使用http client
  详细解决方案

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

热度:922   发布时间:2012-11-26 11:48:50.0
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);  
                }  
            }  
      
        }  
      
    }  
?
  相关解决方案