首页 > 代码库 > 使用URL创建网络连接、网络流的阻塞问题
使用URL创建网络连接、网络流的阻塞问题
在读取网络中流数据时,通常要创建一个网络连接。然而在创建URL连接时,我们通常会忽略掉设置ConnectTimeout,以及ReadTimeout:
URL url = new URL(urlstr);URLConnection conn = url.openConnection();BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));while(!in.ready()){//等待 }while ((line = in.readLine()) != null) {//执行处理}in.close();conn.disconnect();
这种情况下,往往会造成URL阻塞,或者读取流的阻塞。所以应该注意设置超时:
URL url = new URL(urlstr);URLConnection conn = url.openConnection();conn.setReadTimeout(AWAIT_TERMINATION_TIME_OUT);
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));while(!in.ready()){//等待 }while ((line = in.readLine()) != null) {//执行处理}in.close();conn.disconnect();
同样在使用一些其他的网络读写相关的类对象时也应该注意设置超时,否则很有可能造成程序的阻塞挂起。所以也可以相应的设置超时:
for (Future<Object> future : list) { try { Object o = future.get(AWAIT_TERMINATION_TIME_OUT,TimeUnit.MILLISECONDS); //other processing } catch (InterruptedException e) { } catch (ExecutionException e) { } catch (TimeoutException e) { }}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。