【问题标题】:Connection to same URL in different threads using HttpClient使用 HttpClient 连接到不同线程中的相同 URL
【发布时间】:2009-09-25 13:54:18
【问题描述】:

java中使用HttpClient在多线程中获取URL内容的正确方法是什么?

例如加载带有项目的列表,同时在不同的线程中加载每个项目,并从具有不同参数的同一 URL 获取信息。

在我正在创建的应用程序中,当从不同线程中的相同 URL 读取 XML 时,它没有发现元素异常。

【问题讨论】:

    标签: java multithreading httpclient


    【解决方案1】:

    因为接受的答案只描述了 HttpClient 3.x 的解决方案,并且当前版本是 4.1(这也包含在 Android 中),所以我想分享一个有效的 4.x 示例。也许这可以为某人节省一些麻烦。

    SchemeRegistry schemeRegistry = new SchemeRegistry();
    schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
    schemeRegistry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
    
    HttpParams parameters = new BasicHttpParams();
    ClientConnectionManager connectionManager = new ThreadSafeClientConnManager(parameters, schemeRegistry);
    HttpClient httpClient = new DefaultHttpClient(connectionManager, parameters);
    

    【讨论】:

      【解决方案2】:

      我假设您使用 HttpClient 3.0。试试这个,

        HttpClient client = new HttpClient(new MultiThreadedHttpConnectionManager());
      

      【讨论】:

      • 那么在每个线程中创建一个新客户端?还是为多个线程创建 1 个客户端?
      【解决方案3】:

      ThreadSafeClientConnManager 也在 4.2 中被弃用。而不是使用org.apache.http.impl.conn.PoolingHttpClientConnectionManager

      【讨论】:

        【解决方案4】:

        如果您将数据置于应用程序范围内,则它应该可以从任何线程获得。如果数据是敏感的,则不应使用它,并记住在完成后明确删除它,因为如果不删除它,它会在服务器的整个生命周期中存在。

        【讨论】:

          猜你喜欢
          • 2011-05-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多