在Java中,线程在SocketRead0中挂起,我该怎么办?

我正在开发一个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)

上一篇:(一)我的Javascript系列:Javascript的面向对象旅程(上)


下一篇:HttpUrlConnection 的 setDoOutput 与 setDoInput