java.net.URL超時時間默認無限制問題小結(jié)
Java中開發(fā)網(wǎng)絡應用時,通常使用URLConnection或HttpURLConnection。文章介紹了如何通過setConnectTimeout和setReadTimeout設置連接和讀取超時,以避免因網(wǎng)絡問題導致的長時間等待。默認情況下,Java的超時時間是無限的。通過httpstat.us網(wǎng)站可以測試不同延遲的請求,演示了如何通過調(diào)整超時時間處理超時異常。
Java中可以通過URLConnection類或者HttpURLConnection類來開發(fā)網(wǎng)絡應用,它們內(nèi)部又是通過java.net.URL類來實現(xiàn)的??梢酝ㄟ^URLConnection.setConnectTimeout()方法和URLConnection.setReadTimeout()方法來設置URLConnection連接和讀取的超時時間。
URL url = new URL("Example Domain"); URLConnection connection = url.openConnection(); connection.setConnectTimeout(5000); //連接超時時間5秒 connection.setReadTimeout(10000); //讀取數(shù)據(jù)的超時時間10秒
其中setConnectTimeout()設置連接超時時間,單位毫秒
setReadTimeout()設置讀取數(shù)據(jù)的超時時間,單位毫秒
這兩個方法都是可選的,如果不設置超時時間,就會使用系統(tǒng)默認的超時時間。 Java默認的超時時間是無限大,也就是不限制超時時間。所以在開發(fā)中,應該根據(jù)實際情況設置合理的超時時間,避免因網(wǎng)絡故障等原因?qū)е鲁绦蜷L時間等待而出現(xiàn)問題。
例如:直接使用new Url().openStream()就會導致超時無限制問題
源碼:
測試超時時間:
可以使用 httpstat.us 這個網(wǎng)站來測試URL請求的超時時間。
該網(wǎng)站提供了一些測試URL,可以模擬不同延遲的網(wǎng)絡請求。
例如,可以使用URL http://httpstat.us/200?sleep=5000 來模擬延遲5秒的請求,其中的sleep參數(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); //連接超時時間4秒 conn.setReadTimeout(4000); //讀取數(shù)據(jù)的超時時間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實戰(zhàn)之TypeHandler高級進階
本文主要介紹了自定義的枚舉TypeHandler的相關知識,具有很好的參考價值,下面跟著小編一起來看下吧2017-02-02Mybatis入門指南之實現(xiàn)對數(shù)據(jù)庫增刪改查
數(shù)據(jù)持久層主要負責數(shù)據(jù)的增、刪、改、查等功能,MyBatis 則是一款優(yōu)秀的持久層框架,下面這篇文章主要給大家介紹了關于Mybatis入門指南之實現(xiàn)對數(shù)據(jù)庫增刪改查的相關資料,需要的朋友可以參考下2022-10-10Java布爾值Boolean和boolean之間轉(zhuǎn)換實例用法
在本篇文章里小編給大家整理的是一篇關于Java布爾值Boolean和boolean之間轉(zhuǎn)換實例用法內(nèi)容,有需要的朋友們跟著學習參考下。2021-06-06