在java中使用HttpClient獲取多線程中URL的內容的正確方法是什麼?使用HttpClient連接到不同線程中的相同URL
例如,加載帶項目的List,同時在不同線程中加載每個項目,並從具有不同參數的相同URL獲取信息。
在我創造它的應用使我沒有發現元素異常在不同的線程從同一個URL讀取XML時..
在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