我似乎无法弄清楚为什么我的 httpurlconnection 挂起。
我有以下设置:连接url,检查响应码是否为200,如果1秒没有休眠,调用httpurlconnection.disconnect(),然后重试,如果6秒过去,停止尝试并返回。如果有 200 响应代码,则尝试使用缓冲读取器读取输入流,使用(if String (i =readLine())!=null
,将读取超时设置为 8 秒。
所有这些都是使用线程完成的,有时它会挂起,有时它不会,所以我用Callable
and测试了它executorservice
,所以我可以在它在 30 秒后没有返回输入流后终止。但是,如果timeoutexception
执行程序服务中有 a ,用于关闭 a 的 finally 块bufferedreader
不会被执行,并且某些东西仍然挂起。没有无限循环,并且代码,考虑到 8 秒的读取超时httpurlconnection
和 6 秒的限制来获得 200 响应,不应该超过 14-15 秒,但它经常这样做。
那么在任何情况下,变量设置为httpurlconnection
, 都不会通过调用正确终止流disconnect()?
此外,javadoc forurlconnection
的setReadTimeout
方法指出:“此方法的某些非标准实现会忽略指定的超时。”这是什么意思?