我正在开发一个webcrawler,但经常在执行一小段时间后(分钟),一些线程停止工作.运行调试器,我发现它在SocketRead0中停止.
当线程使用HttpURLConnection.getInputStream()下载页面内容时,会发生这种情况.
我不知道是什么导致这种情况,但我认为这与多线程有关.
有人知道如何解决或避免这种情况?
我没有使用HttpURLConnection池但是我不知道该怎么办.
conn = (HttpURLConnection) new URL(url).openConnection();
conn.setInstanceFollowRedirects(true);
conn.connect();
CountingInputStream content;
try {
content = new CountingInputStream(conn.getInputStream());
//processing of content
content.close();
return true;
} catch (Exception e) {
return false;
}
解决方法:
您需要在连接上设置套接字读取超时.这将导致它抛出异常而不是在指定的时间段后挂起.
http://download.oracle.com/javase/1.5.0/docs/api/java/net/URLConnection.html#setReadTimeout(int)