帮助java.net.URLConnection超时?

时间:2010-06-24 13:49:41

标签: java urlconnection

一个连接超时,其上的开发人员位于他的想法列表的底部。

日志友好:

[6/24/10 6:32:34:032 EDT] 0000000d ThreadMonitor W   WSVR0605W: Thread "WebContainer : 136" (0000c53e) has been active for 719542 milliseconds and may be hung.  There is/are 45 thread(s) in total in the server that may be hung.

代码如下:

    try {
        final URLConnection connection = url.openConnection();
        connection.setConnectTimeout(CONNECT_TIME_SECONDS * 1000);
        connection.setReadTimeout(READ_TIME_SECONDS * 1000);
        is = connection.getInputStream();
        document = builder.parse(is);
    } catch (SAXException e) {
        log.error(e);
        throw new PageContentException(e);
    } finally {
        if (is != null) {
            is.close();
        }
    }

我最好的猜测是url.openConnection()在连接超时降低到合理范围之前尝试打开连接,但nothing显示API我如何以不同的方式做到这一点。

有关尝试什么的建议?

4 个答案:

答案 0 :(得分:2)

我会得到线程转储,看看完全它的位置。不要假设。然后你就会明白为什么它会卡在那里。如果您已经有线程转储,请发布堆栈跟踪。

答案 1 :(得分:1)

  

我最好的猜测是url.openConnection()尝试在连接超时降低到合理的范围之前打开连接,但API中没有任何内容告诉我我是如何做到这一点的。

我认为这是可能的情况。在尝试连接开始后设置连接超时不太可行,IMO。

  

有关尝试什么的建议?

您是否尝试在系统属性中设置“sun.net.client.defaultConnectTimeout”属性?记录here

答案 2 :(得分:0)

  

我最好的猜测是   url.openConnection()正在尝试   在连接之前打开连接   超时被降低到什么程度   合理的。

没有。如果是这种情况,URLConnection.setConnectionTimeout()将完全没有意义,因为没有办法比你更早地调用它。

答案 3 :(得分:-3)

这可能是因为“最终”。我不确定你为什么要放在那里,但我认为删除最终应该有所帮助。