Java:如何超时操作?

时间:2013-08-29 07:13:37

标签: java

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

Response resp = ResponseSender.getResponse();

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

3 个答案:

答案 0 :(得分:2)

Respnse封装在FuturTask中,有一种方法get(long timeout, TimeUnit unit)可以做到这一点。

答案 1 :(得分: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类以支持超时并在发生超时时正确关闭资源...

答案 2 :(得分:0)

如果您使用的是下面的网址/ URLConnection,请使用setConnectTimeOutsetReadTimeout。否则其他答案就行了。