[英]How to stop execution after certain time in java
我正在尝试向 java 中的步骤添加重试逻辑。 使用计时器,我可以在一定时间后重复此步骤。 但是,如果该步骤未成功执行,则计时器会一直等到执行停止。 我的要求是我需要在 30 秒后停止执行此步骤,然后重试此逻辑。
以下是我正在尝试做的事情。
步骤说明:我将通过提供 Json 输入来调用方法 processRequest。 此步骤每次都会成功执行并返回一个作业 ID。 我正在轮询 url 以获取对提供的作业 ID 的响应。 此步骤有时无法成功执行或需要大量时间才能返回响应。 我想终止这个轮询任务并重试再次调用 processRequest,这会生成一个新的作业 ID,并且必须将其发送以进行轮询。 该逻辑必须在等待 30 秒后执行 5 次。
Json request={operation:resize};
String JOBID=processRequest(request);
String response=http://pollingUrl/JOBID;
我可以在不将我的 class 扩展到线程 class 的情况下做到这一点,或者请建议是否还有其他方法可以实现相同的目标。
我正在寻找这样的东西:
String response="";
Int count=5;
While (count>0)
{
String JOBID=processRequest(request);
String response=http://pollingUrl/JOBID; // terminate step after 30s
If response !="";
Return response; // return response and stop the while loop.
}
一种可能的方法是使用Thread.sleep()
。 假设您不介意将程序锁定 30 秒,您可以执行以下操作:
String response="";
int count=5;
While (count>0) {
String JOBID=processRequest(request);
String response=http://pollingUrl/JOBID;
if (!response.equals("")) {
return response; // return response and stop the while loop.
}
try {
Thread.sleep(6000); // 6 seconds
} catch (InterruptedException ie) {}
count--;
}
请注意,除非 http 轮询调用是非阻塞的,否则上述方法将不起作用。 也就是说,如果它在内部等待直到提供响应,它将无法工作。 但通常当轮询调用完成时,应该有一种机制在某个时候超时。
编辑:我改变了两件事。 我在测试后移动了睡眠以获得响应。 我修改了你测试平等的方式(这可能是问题的一部分)。 使用equals
而不是==
或!=
来比较字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.