我似乎无法弄清楚我的httpurlconnection挂起的原因。
我有以下设置:连接网址,检查响应代码是否为200,如果没有休眠1秒,请调用httpurlconnection.disconnect(),然后再试一次,如果6秒过去,则停止尝试并返回。如果有200响应代码,则尝试使用缓冲读取器读取输入流,使用(if String (i =readLine())!=null
,将读取超时设置为8秒。
所有这些都是使用线程完成的,有时它会挂起,有时则不挂起,所以我用Callable
和executorservice
测试了它,所以我可以在它不返回后终止30秒后的输入流。但是如果有timeoutexception
,那么从执行程序服务中,关闭bufferedreader
的finally块不会被执行,并且某些内容仍然会挂起。没有无限循环,代码,给定httpurlconnection
的8秒读取超时和获得200响应的6秒限制应该永远不会超过14-15秒,但它经常会这样做。
因此,如果设置为httpurlconnection
的变量无法通过调用disconnect()?
正确终止流,那么urlconnection
的{{1}的javadoc也是如此方法状态:“此方法的某些非标准实现会忽略指定的超时。”这是什么意思?
答案 0 :(得分:0)
我有以下设置:connect url,检查响应代码是否正确 200,如果没有睡1秒,请调用httpurlconnection.disconnect(), 然后再试一次,如果6秒过去,停止尝试并返回。如果 这是一个200响应代码然后尝试用a读取输入流 bufferedreader,using(if String(i = readLine())!= null,设置 读取超时为8秒。
扔掉它并使用URLConnection.setReadTimeout()。这就是它的用途。当您使用HTTP时,您将获得“标准实现”,因此您不必担心“忽略”部分。显然你甚至没有尝试过,或者你已经知道了。
答案 1 :(得分:-1)