在 Java 中,连接超时、请求超时和读取超时的设置是用于网络请求的超时处理机制。每个超时参数控制不同的阶段:
1. **连接超时(Connection Timeout)**:
- 连接超时是指客户端尝试与服务器建立连接的最大时间。如果在规定时间内没有成功建立连接,则会抛出 `SocketTimeoutException`。
- 对于 `HttpURLConnection`:
```java
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(5000); // 5秒
```
- 对于 `OkHttp`:
```java
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(5, TimeUnit.SECONDS)
.build();
```
2. **请求超时(Request Timeout)**:
- 一般指整个请求从发起到接收响应的时间限制(包括连接、写入数据和读取响应的总时间)。有时也可以理解为连接超时加上读取超时。
- 在 `HttpURLConnection` 中没有单独的请求超时,但你可以通过设置连接和读取超时来模拟总请求的超时行为。
3. **读取超时(Read Timeout)**:
- 读取超时是指客户端从服务器读取数据的最大等待时间。如果在设定时间内没有从服务器接收到数据,则会抛出 `SocketTimeoutException`。
- 对于 `HttpURLConnection`:
```java
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setReadTimeout(5000); // 5秒
```
- 对于 `OkHttp`:
```java
OkHttpClient client = new OkHttpClient.Builder()
.readTimeout(5, TimeUnit.SECONDS)
.build();
```
通过合理设置这些超时参数,可以防止网络请求由于异常情况(如服务器不可用或网络问题)而长时间阻塞应用程序。