java.net.URL超时时间默认无限制问题小结

 更新时间:2025年02月28日 10:05:47   作者:曲奇hmb  
文章介绍了如何在Java中使用URLConnection或HttpURLConnection设置连接和读取超时,以处理网络问题导致的长时间等待,通过httpstat.us网站可以测试不同延迟的请求,并演示了如何通过调整超时时间处理超时异常,感兴趣的朋友一起看看吧

Java中开发网络应用时,通常使用URLConnection或HttpURLConnection。文章介绍了如何通过setConnectTimeout和setReadTimeout设置连接和读取超时,以避免因网络问题导致的长时间等待。默认情况下,Java的超时时间是无限的。通过httpstat.us网站可以测试不同延迟的请求,演示了如何通过调整超时时间处理超时异常。

Java中可以通过URLConnection类或者HttpURLConnection类来开发网络应用,它们内部又是通过java.net.URL类来实现的。可以通过URLConnection.setConnectTimeout()方法和URLConnection.setReadTimeout()方法来设置URLConnection连接和读取的超时时间。

URL url = new URL("Example Domain");
URLConnection connection = url.openConnection();
connection.setConnectTimeout(5000); //连接超时时间5秒
connection.setReadTimeout(10000); //读取数据的超时时间10秒

其中setConnectTimeout()设置连接超时时间,单位毫秒

setReadTimeout()设置读取数据的超时时间,单位毫秒

这两个方法都是可选的,如果不设置超时时间,就会使用系统默认的超时时间。  Java默认的超时时间是无限大,也就是不限制超时时间。所以在开发中,应该根据实际情况设置合理的超时时间,避免因网络故障等原因导致程序长时间等待而出现问题。

例如:直接使用new Url().openStream()就会导致超时无限制问题

源码:

 测试超时时间:

可以使用 httpstat.us 这个网站来测试URL请求的超时时间。

该网站提供了一些测试URL,可以模拟不同延迟的网络请求。

例如,可以使用URL http://httpstat.us/200?sleep=5000 来模拟延迟5秒的请求,其中的sleep参数表示需要睡眠的毫秒数。设置连接超时和读取超时时间为4秒,代码如下所示:

import java.net.*;
public class TimeoutTest {
    public static void main(String[] args) {
        try {
            URL url = new URL("http://httpstat.us/200?sleep=5000");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(4000); //连接超时时间4秒
            conn.setReadTimeout(4000); //读取数据的超时时间4秒
            conn.setRequestMethod("GET");
            conn.connect();
            int statusCode = conn.getResponseCode();
            System.out.println("statusCode=" + statusCode);
        } catch (Exception e) {
            System.out.println("timeout error: " + e.getMessage());
        }
    }
}

运行该代码,将会在4秒后输出"timeout error: connect timed out",表明连接超时了。将连接超时和读取超时时间改成6秒,则可以收到"statusCode=200"的响应,表明请求成功。

相关文章

  • Mybatis实战之TypeHandler高级进阶

    Mybatis实战之TypeHandler高级进阶

    本文主要介绍了自定义的枚举TypeHandler的相关知识,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • Maven 命令行打包 和 pom.xml的常用配置详解

    Maven 命令行打包 和 pom.xml的常用配置详解

    这篇文章主要介绍了Maven 命令行打包 和 pom.xml的常用配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Mybatis的核心架构及源码解读

    Mybatis的核心架构及源码解读

    这篇文章主要介绍了Mybatis的核心架构及源码解读,mybatis是一款半自动化的持久层框架,它封装了JDBC操作,支持定制化SQL,高级映射,但它的数据库无关性较低,需要的朋友可以参考下
    2023-08-08
  • java中pdf转图片的实现方法

    java中pdf转图片的实现方法

    下面小编就为大家带来一篇java中pdf转图片的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • Mybatis入门指南之实现对数据库增删改查

    Mybatis入门指南之实现对数据库增删改查

    数据持久层主要负责数据的增、删、改、查等功能,MyBatis 则是一款优秀的持久层框架,下面这篇文章主要给大家介绍了关于Mybatis入门指南之实现对数据库增删改查的相关资料,需要的朋友可以参考下
    2022-10-10
  • Java8中CompletableFuture的用法全解

    Java8中CompletableFuture的用法全解

    这篇文章主要给大家介绍了关于Java8中CompletableFuture用法的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01
  • Java中删除文件或文件夹的几种方法总结

    Java中删除文件或文件夹的几种方法总结

    这篇文章主要介绍了Java中删除文件或文件夹的几种方法总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Spring集成JPA配置懒加载报错解决方案

    Spring集成JPA配置懒加载报错解决方案

    这篇文章主要介绍了Spring集成JPA配置懒加载报错解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • 详解Java中CAS机制的原理与优缺点

    详解Java中CAS机制的原理与优缺点

    CAS 英文就是 compare and swap ,也就是比较并交换,这篇文章主要来和大家介绍一下Java中CAS机制的原理与优缺点,感兴趣的小伙伴可以了解一下
    2023-06-06
  • Java布尔值Boolean和boolean之间转换实例用法

    Java布尔值Boolean和boolean之间转换实例用法

    在本篇文章里小编给大家整理的是一篇关于Java布尔值Boolean和boolean之间转换实例用法内容,有需要的朋友们跟着学习参考下。
    2021-06-06

最新评论