超时超过了我在“java.net.URLConnection”中设置的时间



我正试图将java.net.URLConnection的超时设置为:

URL url = new URL("http://google.com");
URLConnection con = url.openConnection();
con.setConnectTimeout(2000);
con.setReadTimeout(2000);
InputStream in = con.getInputStream();
doc = new Tidy().parseDOM(in, null);
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xpath.compile("//td//span");
Node form = (Node) expr.evaluate(doc, XPathConstants.NODE);

问题是,当我将timeout设置为2000(2秒)时,它会等待更长的时间(例如,我自己数了20秒),直到抛出timeout异常。

问题出在哪里
如何将超时设置为完全按照我设置的值工作?

readTimeOut在Sun(Oracle)的实现中不能可靠地工作。JavaDocs:中甚至提到了这一点

此方法的某些非标准实现忽略指定的超时。要查看读取超时设置,请调用getReadTimeout()。

不过,您可以使用线程或计时器模拟超时。将连接传递给子线程,并要求该线程在超时后调用disconnect或类似的东西。

相关内容

  • 没有找到相关文章