在java中使用HttpClient在多个线程中获取URL的内容的正确方法是什么?
例如,使用项目加载List,同时加载不同线程中的每个项目,并使用不同参数从相同的URL获取信息。
在我正在创建它的应用程序中,当从不同线程中的相同URL读取XML时,我没有发现任何元素发现异常。
答案 0 :(得分:3)
因为接受的答案仅针对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);
答案 1 :(得分:1)
我假设你使用HttpClient 3.0。试试这个,
HttpClient client = new HttpClient(new MultiThreadedHttpConnectionManager());
答案 2 :(得分:1)
ThreadSafeClientConnManager
也在4.2中弃用。而不是使用org.apache.http.impl.conn.PoolingHttpClientConnectionManager
答案 3 :(得分:0)
如果将数据放入应用程序范围,则应该可以从任何线程获得。如果数据是敏感数据,则不应使用此数据,并记住在完成数据后明确删除它,因为如果不删除,它将在服务器的生命周期中存在。