假设我在一个线程中并且我调用了一个外部函数,比如
Response resp = ResponseSender.getResponse();
假设我在t seconds
内没有收到回复,我希望请求超时并执行下一行。我该怎么做?
答案 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
,请使用setConnectTimeOut
和setReadTimeout
。否则其他答案就行了。