java.net.URL超時(shí)時(shí)間默認(rèn)無限制問題小結(jié)
Java中開發(fā)網(wǎng)絡(luò)應(yīng)用時(shí),通常使用URLConnection或HttpURLConnection。文章介紹了如何通過setConnectTimeout和setReadTimeout設(shè)置連接和讀取超時(shí),以避免因網(wǎng)絡(luò)問題導(dǎo)致的長時(shí)間等待。默認(rèn)情況下,Java的超時(shí)時(shí)間是無限的。通過httpstat.us網(wǎng)站可以測試不同延遲的請(qǐng)求,演示了如何通過調(diào)整超時(shí)時(shí)間處理超時(shí)異常。
Java中可以通過URLConnection類或者HttpURLConnection類來開發(fā)網(wǎng)絡(luò)應(yīng)用,它們內(nèi)部又是通過java.net.URL類來實(shí)現(xiàn)的。可以通過URLConnection.setConnectTimeout()方法和URLConnection.setReadTimeout()方法來設(shè)置URLConnection連接和讀取的超時(shí)時(shí)間。
URL url = new URL("Example Domain"); URLConnection connection = url.openConnection(); connection.setConnectTimeout(5000); //連接超時(shí)時(shí)間5秒 connection.setReadTimeout(10000); //讀取數(shù)據(jù)的超時(shí)時(shí)間10秒
其中setConnectTimeout()設(shè)置連接超時(shí)時(shí)間,單位毫秒
setReadTimeout()設(shè)置讀取數(shù)據(jù)的超時(shí)時(shí)間,單位毫秒
這兩個(gè)方法都是可選的,如果不設(shè)置超時(shí)時(shí)間,就會(huì)使用系統(tǒng)默認(rèn)的超時(shí)時(shí)間。 Java默認(rèn)的超時(shí)時(shí)間是無限大,也就是不限制超時(shí)時(shí)間。所以在開發(fā)中,應(yīng)該根據(jù)實(shí)際情況設(shè)置合理的超時(shí)時(shí)間,避免因網(wǎng)絡(luò)故障等原因?qū)е鲁绦蜷L時(shí)間等待而出現(xiàn)問題。
例如:直接使用new Url().openStream()就會(huì)導(dǎo)致超時(shí)無限制問題
源碼:
測試超時(shí)時(shí)間:
可以使用 httpstat.us 這個(gè)網(wǎng)站來測試URL請(qǐng)求的超時(shí)時(shí)間。
該網(wǎng)站提供了一些測試URL,可以模擬不同延遲的網(wǎng)絡(luò)請(qǐng)求。
例如,可以使用URL http://httpstat.us/200?sleep=5000 來模擬延遲5秒的請(qǐng)求,其中的sleep參數(shù)表示需要睡眠的毫秒數(shù)。設(shè)置連接超時(shí)和讀取超時(shí)時(shí)間為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); //連接超時(shí)時(shí)間4秒 conn.setReadTimeout(4000); //讀取數(shù)據(jù)的超時(shí)時(shí)間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()); } } }
運(yùn)行該代碼,將會(huì)在4秒后輸出"timeout error: connect timed out",表明連接超時(shí)了。將連接超時(shí)和讀取超時(shí)時(shí)間改成6秒,則可以收到"statusCode=200"的響應(yīng),表明請(qǐng)求成功。
相關(guān)文章
Mybatis實(shí)戰(zhàn)之TypeHandler高級(jí)進(jìn)階
本文主要介紹了自定義的枚舉TypeHandler的相關(guān)知識(shí),具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-02-02java中pdf轉(zhuǎn)圖片的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄猨ava中pdf轉(zhuǎn)圖片的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12Mybatis入門指南之實(shí)現(xiàn)對(duì)數(shù)據(jù)庫增刪改查
數(shù)據(jù)持久層主要負(fù)責(zé)數(shù)據(jù)的增、刪、改、查等功能,MyBatis 則是一款優(yōu)秀的持久層框架,下面這篇文章主要給大家介紹了關(guān)于Mybatis入門指南之實(shí)現(xiàn)對(duì)數(shù)據(jù)庫增刪改查的相關(guān)資料,需要的朋友可以參考下2022-10-10Spring集成JPA配置懶加載報(bào)錯(cuò)解決方案
這篇文章主要介紹了Spring集成JPA配置懶加載報(bào)錯(cuò)解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10詳解Java中CAS機(jī)制的原理與優(yōu)缺點(diǎn)
CAS?英文就是?compare?and?swap?,也就是比較并交換,這篇文章主要來和大家介紹一下Java中CAS機(jī)制的原理與優(yōu)缺點(diǎn),感興趣的小伙伴可以了解一下2023-06-06Java布爾值Boolean和boolean之間轉(zhuǎn)換實(shí)例用法
在本篇文章里小編給大家整理的是一篇關(guān)于Java布爾值Boolean和boolean之間轉(zhuǎn)換實(shí)例用法內(nèi)容,有需要的朋友們跟著學(xué)習(xí)參考下。2021-06-06