如何在Java中经过一定时间后停止执行

时间:2019-10-20 15:59:04

标签: 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.
    }

1 个答案:

答案 0 :(得分:1)

一种可能的方法是使用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而非==!=来比较字符串。