繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM