假设我在一个线程中,并且我调用了一个外部函数,例如
Response resp = ResponseSender.getResponse();
假设我在 内没有得到响应t seconds
,我希望请求超时并执行下一行。我该怎么做呢?
假设我在一个线程中,并且我调用了一个外部函数,例如
Response resp = ResponseSender.getResponse();
假设我在 内没有得到响应t seconds
,我希望请求超时并执行下一行。我该怎么做呢?
将 封装Respnse
在FuturTask中,有一个方法get(long timeout, TimeUnit unit)可以做到这一点。
这可以通过将您的代码放在一个线程中轻松获得,像这样开始它:
private static class TimeoutJob implements Runnable {
private Response resp;
public void run() {
resp = ResponseSender.getResponse();
}
public Response getResponse() {
return resp;
}
在您的代码中输入:
TimeoutJob tj = new TimneoutJob();
Thread t = new Thread(tj);
t.start();
t.join(1000); // try to join the thread so waiting for the response to comeback, having a timeout of 1000 milliseconds
if (tj.getResponse() != null) // -> you have a response...
有一个中断的异常需要被捕获,所以这段代码不是 100% 完整的,但你明白我的意思。
注意:这将为您提供超时功能,但 ResponseSender 仍在运行 getResponse() 代码并且您没有中断它。您可能最好重新设计 ResponseSender 类以支持超时并在发生超时时正确关闭资源......
如果您在URLConnection
下面使用 URL /,请使用setConnectTimeOut
and setReadTimeout
。否则其他答案会做。