zoukankan      html  css  js  c++  java
  • Apache HttpComponents 多线程处理HTTP请求

    /*
     * ====================================================================
     *
     *  Licensed to the Apache Software Foundation (ASF) under one or more
     *  contributor license agreements.  See the NOTICE file distributed with
     *  this work for additional information regarding copyright ownership.
     *  The ASF licenses this file to You under the Apache License, Version 2.0
     *  (the "License"); you may not use this file except in compliance with
     *  the License.  You may obtain a copy of the License at
     *
     *      http://www.apache.org/licenses/LICENSE-2.0
     *
     *  Unless required by applicable law or agreed to in writing, software
     *  distributed under the License is distributed on an "AS IS" BASIS,
     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     *  See the License for the specific language governing permissions and
     *  limitations under the License.
     * ====================================================================
     *
     * This software consists of voluntary contributions made by many
     * individuals on behalf of the Apache Software Foundation.  For more
     * information on the Apache Software Foundation, please see
     * <http://www.apache.org/>.
     *
     */
    
    package org.apache.http.examples.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.PoolingClientConnectionManager;
    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.
            PoolingClientConnectionManager cm = new PoolingClientConnectionManager();
            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);
                }
            }
    
        }
    
    }
  • 相关阅读:
    字符串 CSV解析 表格 逗号分隔值 通讯录 电话簿 MD
    Context Application 使用总结 MD
    RxJava RxPermissions 动态权限 简介 原理 案例 MD
    Luban 鲁班 图片压缩 MD
    FileProvider N 7.0 升级 安装APK 选择文件 拍照 临时权限 MD
    组件化 得到 DDComponent JIMU 模块 插件 MD
    gradlew 命令行 build 调试 构建错误 Manifest merger failed MD
    protobuf Protocol Buffers 简介 案例 MD
    ORM数据库框架 SQLite 常用数据库框架比较 MD
    [工具配置]requirejs 多页面,多入口js文件打包总结
  • 原文地址:https://www.cnblogs.com/daxin/p/3165169.html
Copyright © 2011-2022 走看看