java.net.URL超時時間默認無限制問題小結(jié)
Java中開發(fā)網(wǎng)絡(luò)應(yīng)用時,通常使用URLConnection或HttpURLConnection。文章介紹了如何通過setConnectTimeout和setReadTimeout設(shè)置連接和讀取超時,以避免因網(wǎng)絡(luò)問題導(dǎo)致的長時間等待。默認情況下,Java的超時時間是無限的。通過httpstat.us網(wǎng)站可以測試不同延遲的請求,演示了如何通過調(diào)整超時時間處理超時異常。
Java中可以通過URLConnection類或者HttpURLConnection類來開發(fā)網(wǎng)絡(luò)應(yīng)用,它們內(nèi)部又是通過java.net.URL類來實現(xiàn)的。可以通過URLConnection.setConnectTimeout()方法和URLConnection.setReadTimeout()方法來設(shè)置URLConnection連接和讀取的超時時間。
URL url = new URL("Example Domain");
URLConnection connection = url.openConnection();
connection.setConnectTimeout(5000); //連接超時時間5秒
connection.setReadTimeout(10000); //讀取數(shù)據(jù)的超時時間10秒其中setConnectTimeout()設(shè)置連接超時時間,單位毫秒
setReadTimeout()設(shè)置讀取數(shù)據(jù)的超時時間,單位毫秒
這兩個方法都是可選的,如果不設(shè)置超時時間,就會使用系統(tǒng)默認的超時時間。 Java默認的超時時間是無限大,也就是不限制超時時間。所以在開發(fā)中,應(yīng)該根據(jù)實際情況設(shè)置合理的超時時間,避免因網(wǎng)絡(luò)故障等原因?qū)е鲁绦蜷L時間等待而出現(xiàn)問題。
例如:直接使用new Url().openStream()就會導(dǎo)致超時無限制問題
源碼:

測試超時時間:
可以使用 httpstat.us 這個網(wǎng)站來測試URL請求的超時時間。
該網(wǎng)站提供了一些測試URL,可以模擬不同延遲的網(wǎng)絡(luò)請求。
例如,可以使用URL http://httpstat.us/200?sleep=5000 來模擬延遲5秒的請求,其中的sleep參數(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); //連接超時時間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"的響應(yīng),表明請求成功。
相關(guān)文章
Spring mvc如何實現(xiàn)數(shù)據(jù)處理
這篇文章主要介紹了Spring mvc如何實現(xiàn)數(shù)據(jù)處理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03
response.sendRedirect()實現(xiàn)重定向(頁面跳轉(zhuǎn))
在Java web開發(fā)中,使用response.sendRedirect()可實現(xiàn)重定向功能。本文將介紹如何使用該方法進行頁面跳轉(zhuǎn),以及該方法的使用場景和注意事項,感興趣的可以了解一下2023-04-04
MyBatis在注解上使用動態(tài)SQL方式(@select使用if)
這篇文章主要介紹了MyBatis在注解上使用動態(tài)SQL方式(@select使用if),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
SpringCloud中的openFeign調(diào)用服務(wù)并傳參的過程
服務(wù)和服務(wù)之間通信,不僅僅是調(diào)用,往往在調(diào)用過程中還伴隨著參數(shù)傳遞,接下來重點來看看OpenFeign在調(diào)用服務(wù)時如何傳遞參數(shù),感興趣的朋友一起看看吧2023-11-11
kkFileView在線預(yù)覽office的常見問題以及解決方案
kkFileView在線預(yù)覽Office常見問題包括base64編碼配置、Office組件安裝、亂碼處理及水印添加,解決方案涉及版本適配、安裝LibreOffice、設(shè)置編碼和字體路徑,以及通過URL參數(shù)傳遞水印文本2025-07-07
Java從ftp服務(wù)器上傳與下載文件的實現(xiàn)
這篇文章主要給大家介紹了關(guān)于Java從ftp服務(wù)器上傳與下載文件的實現(xiàn)方法,最近項目中需要實現(xiàn)將文件先存放到ftp上,需要的時候再從ftp上下載,做的過程中碰到了問題,所以這里總結(jié)下,需要的朋友可以參考下2023-08-08

