使用HttpClient连接到不同线程中的相同URL
问题描述:
在java中使用HttpClient获取多线程中URL的内容的正确方法是什么?使用HttpClient连接到不同线程中的相同URL
例如,加载带项目的List,同时在不同线程中加载每个项目,并从具有不同参数的相同URL获取信息。
在我创造它的应用使我没有发现元素异常在不同的线程从同一个URL读取XML时..
答
我假设你使用的HttpClient 3.0。试试这个吧,
HttpClient client = new HttpClient(new MultiThreadedHttpConnectionManager());
答
如果你把数据放到应用程序范围内,它应该可以从任何线程中使用。如果数据是敏感的,那么不应该使用它,并且记住在完成时明确地将其删除,因为它在整个服务器中存在(如果不删除)。
答
因为接受的答案仅描述了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);
答
ThreadSafeClientConnManager
也在4.2中描述。而不是使用org.apache.http.impl.conn.PoolingHttpClientConnectionManager
因此,在每个线程中创建一个新的客户端?或为多个线程创建1个客户端? – Thys 2009-09-25 14:01:36
所有主题的一个客户端。 – 2009-09-25 15:01:51