0

假设我在一个线程中,并且我调用了一个外部函数,例如

Response resp = ResponseSender.getResponse();

假设我在 内没有得到响应t seconds,我希望请求超时并执行下一行。我该怎么做呢?

4

3 回答 3

2

将 封装RespnseFuturTask中,有一个方法get(long timeout, TimeUnit unit)可以做到这一点。

于 2013-08-29T07:18:57.037 回答
0

这可以通过将您的代码放在一个线程中轻松获得,像这样开始它:

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 类以支持超时并在发生超时时正确关闭资源......

于 2013-08-29T07:22:02.020 回答
0

如果您在URLConnection下面使用 URL /,请使用setConnectTimeOutand setReadTimeout。否则其他答案会做。

于 2013-08-29T07:23:14.407 回答