如何在 java 中一段时间后停止执行

  • 本文关键字:执行 一段时间 java 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;

我可以在不将我的类扩展到 Thread 类的情况下执行此操作,或者请建议是否还有其他方法可以实现相同的目标。

我正在寻找这样的东西:

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而不是==!=来比较字符串。

最新更新