java请求超时
㈠ java:这两种设置超时时间有什么区别
以下来自官方文档,学习编程只要看文档就可以了
setSoTimeout
public void setSoTimeout(int timeout)
throws SocketException
启用/禁用带有指定超时值的 SO_TIMEOUT,以毫秒为单位。将此选项设为非零的超时值时,在与此 Socket 关联的 InputStream 上调用
read() 将只阻塞此时间长度。如果超过超时值,将引发 java.net.SocketTimeoutException,虽然 Socket
仍旧有效。选项必须在进入阻塞操作前被启用才能生效。超时值必须是 > 0 的数。超时值为 0 被解释为无穷大超时值。
参数:
timeout - 指定的以毫秒为单位的超时值。
抛出:
SocketException -
如果底层协议出现错误,例如 TCP 错误。
connect
public void connect(SocketAddress endpoint,
int timeout)
throws IOException
将此套接字连接到服务器,并指定一个超时值。超时值零被解释为无限超时。在建立连接或者发生错误之前,连接一直处于阻塞状态。
参数:
endpoint - SocketAddress
timeout - 要使用的超时值(以毫秒为单位)。
抛出:
IOException - 如果在连接期间发生错误
SocketTimeoutException
- 如果在连接之前超时期满
IllegalBlockingModeException
- 如果此套接字具有关联的通道并且该通道处于非阻塞模式
IllegalArgumentException
- 如果端点为 null 或者此套接字不支持 SocketAddress 子类
㈡ java客户端调用webservice 超时问题
用多线程来处理类似问题
将调用这个WebService的程序放到一个独立线程A中,再创建另一个线程B用来计时,线程A和线程B共享一个变量responseOK。
在线程A中调用WebService之前启动线程B,成功返回后设定responseOK=true。
线程B启动后计时,如果responseOK==true则停止计时,如果计时超过20秒,则终止线程A并返回错误信息。
似乎webService调用的时候如果服务端超时应该会有异常触发的,截获此异常即可。
