我一直在研究一个java类,它从文本文件中读取大量的URL,每个都打开一个HttpURLConnection
,然后检查它们的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;
}
答案 0 :(得分:0)
不要自己进行连接管理,如果使用Apache http客户端API会更好。
以及多线程用例的示例。
请注意,此代码仅供参考,实际生产代码应使用Pooled Executor进行线程管理。 您的Validate方法应该是实现Runnable或Callable接口的类的一部分,具体取决于您的用例。
答案 1 :(得分:0)
我建议您查看异步HTTP客户端库,例如Ning。