java.net,挂起在java中

java.net,挂起在java中,java,networking,Java,Networking,我似乎不明白为什么我的httpurl连接挂起了 我有以下设置:连接url,检查响应代码是否为200,如果1秒钟内未休眠,请调用httpurlconnection.disconnect,然后重试,如果6秒钟过去,请停止尝试并返回。如果有一个200响应代码,那么尝试用一个bufferedreader读取输入流,使用if String i=readLine=null,将读取超时设置为8秒 所有这些都是使用线程完成的,有时它挂起,有时它不挂起,所以我用一个可调用的executorservice测试了它,

我似乎不明白为什么我的httpurl连接挂起了

我有以下设置:连接url,检查响应代码是否为200,如果1秒钟内未休眠,请调用httpurlconnection.disconnect,然后重试,如果6秒钟过去,请停止尝试并返回。如果有一个200响应代码,那么尝试用一个bufferedreader读取输入流,使用if String i=readLine=null,将读取超时设置为8秒

所有这些都是使用线程完成的,有时它挂起,有时它不挂起,所以我用一个可调用的executorservice测试了它,这样我就可以在30秒后它没有返回inputstream后终止。但是,如果存在来自executor服务的timeoutexception,则关闭bufferedreader的finally块不会被执行,并且某些内容仍然挂起。不存在无限循环,并且给定httpurlconnection的8秒读取超时和获取200响应的6秒限制,代码的运行时间永远不会超过14-15秒,但通常会超过14-15秒


那么,在任何情况下,设置为httpurlconnection的变量都不会通过调用disconnect正确终止流吗?另外,javadoc for urlconnection的setReadTimeout方法声明:此方法的一些非标准实现会忽略指定的超时。这意味着什么?

哎哟,这似乎是一个不必要的复杂解决方案。为什么不使用apache中的Java HTTPCLient

我有以下设置:连接url,检查响应代码是否正确 200,如果1秒钟未休眠,请调用httpurlconnection.disconnect, 然后再试一次,如果6秒钟过去,停止尝试并返回。如果 有一个200响应代码,然后尝试使用 bufferedreader,使用if String i=readLine=null,设置 读取超时为8秒


扔掉它,使用URLConnection.setReadTimeout。这就是它的目的。当您使用HTTP时,您将获得一个“标准实现”,因此您不必担心“忽略”部分。显然你还没有试过,或者你已经知道了。

文本蝙蝠侠的神圣之墙。尝试将其格式设置得更好一点,最重要的是,显示您的代码。一个段落中有很多单词!“忽略”的哪一部分您不明白?什么看起来像是一个不必要的复杂解决方案?OP看起来像是在尝试与您自己的http客户端通信。我曾指出,有更简单的方法可以做到这一点。