【发布时间】:2011-09-27 06:49:59
【问题描述】:
我正在开发一个网络爬虫,但通常在执行短时间(几分钟)后,一些线程会停止工作。运行调试器,发现它停在了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;
}
【问题讨论】:
-
首先发布一些代码 - 没有人可以看到你做了什么,所以没有人可以提出修复建议。
-
爬取线程是否可能实际上正在等待来自远程服务器的数据?我会用 NIO 来做这些事情。
-
@duffymo 我添加了一些代码。连接打开到服务器,线程停止在
conn.getInputStream() -
我正在使用 HttpURLConnection 开发网络爬虫。忘了它。至于您的问题,您可以等待连接超时或调用 Thread.interrupt
-
@bestsss 你推荐使用什么?
标签: java multithreading web-crawler inputstream httpurlconnection