我在程序中使用HttpURLConnection连接URL,但有时会连接的时间过长,一直等待下去
我已经设置了超时,但是感觉没有效果
connection.setConnectTimeout(connectTimeout*1000);
connection.setReadTimeout(readTimeout*1000);
然后获取并解析页面
connection.connect();
InputSource inpSrc = new InputSource(new InputStreamReader(connection.getInputStream(),"utf-8"));
inpSrc.setEncoding(encoding);
SAXReader reader = new SAXReader();
Document doc = reader.read(inpSrc); //程序有时会卡死在这一句上我想知道是什么原因导致的程序无限等待,还有应该如何解决
我已经设置了超时,但是感觉没有效果
connection.setConnectTimeout(connectTimeout*1000);
connection.setReadTimeout(readTimeout*1000);
然后获取并解析页面
connection.connect();
InputSource inpSrc = new InputSource(new InputStreamReader(connection.getInputStream(),"utf-8"));
inpSrc.setEncoding(encoding);
SAXReader reader = new SAXReader();
Document doc = reader.read(inpSrc); //程序有时会卡死在这一句上我想知道是什么原因导致的程序无限等待,还有应该如何解决
楼主【hhxkss】截止到2008-07-28 11:01:38的历史汇总数据(不包括此帖):
发帖的总数量:2 发帖的总分数:20 每贴平均分数:10
回帖的总数量:33 得分贴总数量:12 回帖的得分率:36%
结贴的总数量:2 结贴的总分数:20
无满意结贴数:1 无满意结贴分:30
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:50.00 % 无满意结分率:150.00%
敬礼!
//JDK5.0及其以后的版本支持
connection.setConnectTimeout(10000);
connection.setReadTimeout(10000);
//JDK5.0以前的版本支持
System.setProperty("sun.net.client.defaultConnectTimeout", "30000");
System.setProperty("sun.net.client.defaultReadTimeout", "30000");
SAXReader 是读取XML文件的,如果XML文件的格式不对,可能出现问题!
没研究过SAX的源码,不知道在read的时候你设置的ReadTimeout有没有效果。
这种现象不是每次都会出现的,大概千分之一的概率,但是一旦出现程序就假死了。
程序我已经追踪过了,卡在这一句 Document doc = reader.read(inpSrc);
如果是xml文件格式的问题会报异常的,我现在怀疑是因为无法收到完整的数据而发生长时间阻塞,准备用下面的方法解决超时问题。
http://blog.chinaunix.net/u1/56194/showart_462504.html