面试题答案
一键面试应用场景
- 防止网络请求长时间阻塞:在客户端向服务器发送请求时,如果服务器没有及时响应,设置超时可以避免客户端一直等待,消耗系统资源。例如,调用远程API获取数据,若API处理缓慢或网络出现问题,超时设置可使客户端在一定时间后放弃等待,给用户相应提示。
- 优化网络资源利用:在大量并发网络连接的情况下,通过设置超时,对于长时间无响应的连接能及时释放,避免无效连接占用过多资源,提高系统整体性能。
代码设置读取超时和连接超时示例
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.SocketTimeoutException;
public class SocketTimeoutExample {
public static void main(String[] args) {
try (Socket socket = new Socket()) {
// 设置连接超时为5秒
socket.connect(new java.net.InetSocketAddress("www.example.com", 80), 5000);
// 设置读取超时为3秒
socket.setSoTimeout(3000);
try (BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
}
} catch (SocketTimeoutException e) {
System.out.println("读取超时");
} catch (IOException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
在上述代码中:
socket.connect(new java.net.InetSocketAddress("www.example.com", 80), 5000);
设置连接到服务器www.example.com
的80端口的连接超时时间为5000毫秒(5秒)。socket.setSoTimeout(3000);
设置从服务器读取数据的超时时间为3000毫秒(3秒)。如果在3秒内没有读取到数据,就会抛出SocketTimeoutException
异常。