我一直在研究一個java類,它從文本文件中讀取大量的URL,打開一個HttpURLConnection
與他們每個人,然後檢查他們的HTTP代碼,看看該網站正確連接。這個功能工作正常,問題是我在這裏處理數以十萬計的鏈接,而且這個方法太慢而無法處理所有這些。我嘗試使用線程來提高過程的效率,但無論出於何種原因,這似乎進一步降低了速度。任何可能的解決方案建議?謝謝!錯誤獲取(1000年)URL HTTP代碼
public static boolean validate(String urlStr, Proxy proxy)
{
boolean valid = false;
HttpURLConnection conn = null;
try
{
if(proxy==null)
conn = (HttpURLConnection)new URL(urlStr).openConnection();
else
conn = (HttpURLConnection)new URL(urlStr).openConnection(proxy);
conn.setFollowRedirects(false);
conn.setConnectTimeout(7 * 1000);
conn.setRequestMethod("GET");
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)");
conn.connect();
final int code = conn.getResponseCode();
valid = (Arrays.binarySearch(errorCodes, code) == -1);
}
catch(IOException e)
{
// Ignore this for now. Eventually we should add a logger
} finally {
if (conn != null)
{
conn.disconnect();
}
}
return valid;
}
線程並不神奇 - 它們不能解決打開數千個連接和執行I/O操作的真正問題。這可能是因爲你打開的鏈接數量有問題。你有沒有試圖淡化它(也許敲三四個數量級),看看它是否能提高性能? – Makoto
如果沒有看到任何代碼,很難知道有什麼問題。我不希望那裏會有太多的代碼在這裏發佈......請編輯它到問題中。 –
爲什麼不能使用java併發線程池....你可以指定池的大小。 – Hariharan