集册 Java实例教程 从多个线程执行获取。apache http客户端

从多个线程执行获取。apache http客户端

欢马劈雪     最近更新时间:2020-01-02 10:19:05

448
从多个线程执行GET。 apache 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;
/** 
 来自 n o w j a v a . c o m - 时代Java**/

import org.apache.http.client.methods.CloseableHttpResponse;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClients;

import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;

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./**来 自 nowjava.com - 时代Java**/

        // This connection manager must be used if more than one thread will

        // be using the HttpClient.

        PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();

        cm.setMaxTotal(100);


        CloseableHttpClient httpclient = HttpClients.custom()

                .setConnectionManager(cm).build();

        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/", };


            // 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 {

            httpclient.close();

        }

    }


    /**

     * A thread that performs a GET.

     */

    static class GetThread extends Thread {


        private final CloseableHttpClient httpClient;

        private final HttpContext context;

        private final HttpGet httpget;

        private final int id;


        public GetThread(CloseableHttpClient 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() {

            try {

                System.out.println(id + " - about to get something from "

                        + httpget.getURI());

                CloseableHttpResponse 
展开阅读全文