超时比我在`java.net.URLConnection`中设置的要多

时间:2012-01-08 22:19:53

标签: java timeout 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);

问题在于,当我将超时设置为2000(2秒)时,它会等待超过它(例如我自己计算的20秒),直到抛出超时异常。

有什么问题?
如何将超时设置为完全符合我设置的值?

1 个答案:

答案 0 :(得分:1)

readTimeOut无法在Sun的(Oracle)实施中可靠地运行。甚至在JavaDocs

中也提到了这一点
  

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

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