【发布时间】:2009-09-25 13:54:18
【问题描述】:
java中使用HttpClient在多线程中获取URL内容的正确方法是什么?
例如加载带有项目的列表,同时在不同的线程中加载每个项目,并从具有不同参数的同一 URL 获取信息。
在我正在创建的应用程序中,当从不同线程中的相同 URL 读取 XML 时,它没有发现元素异常。
【问题讨论】:
标签: java multithreading httpclient
java中使用HttpClient在多线程中获取URL内容的正确方法是什么?
例如加载带有项目的列表,同时在不同的线程中加载每个项目,并从具有不同参数的同一 URL 获取信息。
在我正在创建的应用程序中,当从不同线程中的相同 URL 读取 XML 时,它没有发现元素异常。
【问题讨论】:
标签: java multithreading httpclient
因为接受的答案只描述了 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);
【讨论】:
我假设您使用 HttpClient 3.0。试试这个,
HttpClient client = new HttpClient(new MultiThreadedHttpConnectionManager());
【讨论】:
ThreadSafeClientConnManager 也在 4.2 中被弃用。而不是使用org.apache.http.impl.conn.PoolingHttpClientConnectionManager
【讨论】:
如果您将数据置于应用程序范围内,则它应该可以从任何线程获得。如果数据是敏感的,则不应使用它,并记住在完成后明确删除它,因为如果不删除它,它会在服务器的整个生命周期中存在。
【讨论】: