Java中可以使用HttpURLConnection来请求WEB资源。

HttpURLConnection对象不能直接构造,需要通过URL.openConnection()来获得HttpURLConnection对象,示例代码如下:

String urlStr= www.jaddy.org;

URL url = new URL(urlStr);

HttpURLConnection conn = (HttpURLConnection)url.openConnection();

HttpURLConnection是基于HTTP协议的,其底层通过socket通信实现。如果不设置超时(timeout),在网络异常的情况下,可能会导致程序僵死而不继续往下执行。可以通过以下两个语句来设置相应的超时:

System.setProperty("sun.net.client.defaultConnectTimeout", 超时毫秒数字符串);

System.setProperty("sun.net.client.defaultReadTimeout", 超时毫秒数字符串);

其中: sun.net.client.defaultConnectTimeout:连接主机的超时时间(单位:毫秒)

sun.net.client.defaultReadTimeout:从主机读取数据的超时时间(单位:毫秒)

例如:

System.setProperty("sun.net.client.defaultConnectTimeout", "30000");

System.setProperty("sun.net.client.defaultReadTimeout", "30000");

JDK 1.5以前的版本,只能通过设置这两个系统属性来控制网络超时。在1.5中,还可以使用HttpURLConnection的父类URLConnection的以下两个方法:

setConnectTimeout:设置连接主机超时(单位:毫秒)

setReadTimeout:设置从主机读取数据超时(单位:毫秒)

例如:

HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();

urlCon.setConnectTimeout(30000);

urlCon.setReadTimeout(30000);

备注:

我在项目中碰到这个问题比较隐蔽,开始我以为是线程死锁造成我的线程无法执行下去,后来我用 JavavisualVM工具显示的线程DUMP堆信息:

"Tue Jun 17 09:41:40 CST 2014172.16.11.107" daemon prio=6 tid=0x0db77c00 nid=0x1470 runnable [0x0f43f000]

java.lang.Thread.State: RUNNABLE

at java.net.SocketInputStream.socketRead0(Native Method)

at java.net.SocketInputStream.read(SocketInputStream.java:129)

at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)

at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)

at java.io.BufferedInputStream.read(BufferedInputStream.java:317)

- locked <0x06735a50> (a java.io.BufferedInputStream)

at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687)

at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)

at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1064)

- locked <0x06735a88> (a sun.net.www.protocol.http.HttpURLConnection)

at sun.net.www.protocol.http.HttpURLConnection.getHeaderFields(HttpURLConnection.java:2187)

at com.zzst.application.meeting.mcu.operate.rmx2000.RMX2000Sender.sendPost(RMX2000Sender.java:86)

at com.zzst.application.meeting.mcu.operate.rmx2000.RMX2000Sender.sendPost(RMX2000Sender.java:35)

at com.zzst.application.meeting.mcu.operate.rmx2000.ZZMCU2000ContactHandler.contact(ZZMCU2000ContactHandler.java:124)

at com.zzst.application.meeting.mcu.operate.rmx2000.ZZMCU2000ContactHandler.run(ZZMCU2000ContactHandler.java:65)

at java.lang.Thread.run(Thread.java:619)

Locked ownable synchronizers:

- None

从这个堆信息可以看出,停在“HttpURLConnection.getHeaderFields”语句处。现在我在我的程序里设置了连接主机超时和从主句中获取数据超时两个参数,看看接下来系统运行效果如何。

java url 设置超时_(转)HttpURLConnection中设置网络超时相关推荐

  1. java 线程池超时_线程池中如何控制超时时间?

    线程池构造方法不能控制任务的超时时间, java.util.concurrent.ThreadPoolExecutor#ThreadPoolExecutor(int, int, long, java. ...

  2. python设置函数_在Python中设置函数签名

    假设我有一个泛型函数f,我想以编程方式创建一个行为与f相同但具有自定义签名的函数f2. 更多细节 给定列表l和字典d,我希望能够:将f2的非关键字参数设置为l中的字符串 将f2的关键字参数设置为d中的 ...

  3. HttpURLConnection中设置网络超时

    (转 转:http://www.xd-tech.com.cn/blog/article.asp?id=37 Java中可以使用HttpURLConnection来请求WEB资源. HttpURLCon ...

  4. java.lang.IllegalArgumentException: 字符[_]在域名中永远无效。 at

    [http-nio-8080-exec-1] org.apache.coyote.AbstractProcessor.parseHost [xxx_tomcat] 是无效主机注意:更多的请求解析错误将 ...

  5. android 设置全屏方法,Android中设置全屏的方法

    在开发中,我们经常需要把我们的应用设置为全屏,这里有两种方式: 一是在代码中设置; 二是在配置文件中设置 一. 在代码中设置 public class BaseActivity extends Act ...

  6. java converter转换器_在SpringMVC中设置自定义类型转换器Converter

    前言 在SpringMVC中为我们提供了许多内置的类型转换器,当我们在HTML表单中发起一个请求时,Spring会根据表单项中name属性的值映射到POJO的属性名,调用相对性属性的set方法帮我们把 ...

  7. axios 超时_聊聊 Vue 中 axios 的封装

    axios 是 Vue 官方推荐的一个 HTTP 库,用 axios 官方简介来介绍它,就是: Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. 作为一 ...

  8. java no cache_java – 在我的部署中设置Cache-Control no-cache,no-store是什么?

    我有一个问题,我的应用程序部署总是返回响应标头: Cache-Control: no-cache Cache-Control: no-store Expires:Thu, 01 Jan 1970 00 ...

  9. aws集群重启_在AWS中设置Cassandra集群

    aws集群重启 Apache Cassandra是一个NoSQL数据库,它使用一致的哈希机制可以轻松进行水平扩展. 七年前,我尝试了它,并决定不将其用于我的附带项目,因为它太新了. 现在情况有所不同, ...

最新文章

  1. groovy怎样从sql语句中截取表名_sql注入mysql篇
  2. ROI(投资回报率 Return On Investment)
  3. python数据挖掘分析案例python_Python 数据挖掘实例 决策树分析
  4. Python ord 函数 - Python零基础入门教程
  5. 【2019.09.14】2019icpc沈阳网络赛
  6. MySQL------报错Access denied for user ‘root‘@‘localhost‘ (using password:NO)解决方法
  7. 自动控制原理学习--奈奎斯特稳定判据
  8. 用树莓派USB摄像头做个监控
  9. C#学习 - 关于Single()
  10. 4种营销概念 -seo sem edm affi - 立体营销
  11. win10系统word2019显示目录只显示部分一级二级解决办法
  12. 360天擎彻底卸载的方法教程
  13. Python安装火狐浏览器驱动
  14. vue:tabel和form 分别动态生成 列 与 文本框
  15. component: resolve = require(['../pages/home.vue'], resolve),
  16. i.MX6ULL驱动开发 | 12 - 基于 Linux I2C 驱动读取AP3216C传感器
  17. 区块链中的Merkle Tree
  18. Java基础之数据导入
  19. 为什么说超快恢复二极管MURF1040CT-ASEMI比普通二极管好
  20. 计算机的键盘操作课件,计算机应用基础教程-认识键盘ppt课件.ppt

热门文章

  1. 手写RPC框架(八)
  2. html 绘制甘特图,Markdown绘制甘特图教程
  3. java bcd 压缩_压缩BCD编码的Java实现
  4. 基于SX1276芯片的 LORA 技术开发详解
  5. Dell G7 指纹识别设备 - Goodix fingerprint 失效官方解决办法(图文)
  6. esxi 部署模板_ESXi 制作模板并优化 Centos
  7. Egret解疑释惑之程序入口
  8. 勾股定理一日一证连载123
  9. Android smartTable的简单使用
  10. 0基础1天学会js-第二讲