在java中,如何在特定时间后停止执行

在java中,如何在特定时间后停止执行,java,Java,我试图在java中的一个步骤中添加一个重试逻辑。使用计时器,我可以在特定时间后重复此步骤。但是,如果步骤没有成功执行,计时器将等待直到执行停止。我的要求是,我需要在30秒后停止执行此步骤,然后重试此逻辑 下面是我想做的 步骤说明:我将通过提供Json输入调用processRequest方法。此步骤每次都会成功执行并返回作业Id。我正在轮询url以获取对所提供作业Id的响应。此步骤有时无法成功执行或需要花费大量时间才能返回响应。我想终止此轮询任务,并再次尝试调用processRequest,它将生

我试图在java中的一个步骤中添加一个重试逻辑。使用计时器,我可以在特定时间后重复此步骤。但是,如果步骤没有成功执行,计时器将等待直到执行停止。我的要求是,我需要在30秒后停止执行此步骤,然后重试此逻辑

下面是我想做的

步骤说明:我将通过提供Json输入调用processRequest方法。此步骤每次都会成功执行并返回作业Id。我正在轮询url以获取对所提供作业Id的响应。此步骤有时无法成功执行或需要花费大量时间才能返回响应。我想终止此轮询任务,并再次尝试调用processRequest,它将生成一个新的作业Id,并且必须发送该Id进行轮询。此逻辑必须在等待30秒后执行5次

     Json request={operation:resize};
     String JOBID=processRequest(request);
     String response=http://pollingUrl/JOBID;
我可以在不将我的类扩展到线程类的情况下这样做吗?或者请建议是否还有其他方法可以实现同样的效果

我在找这样的东西:

    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秒,您可以执行以下操作:


字符串响应=”;
整数计数=5;
而(计数>0){
字符串JOBID=processRequest(请求);
字符串响应=http://pollingUrl/JOBID;
如果(!response.equals(“”){
return response;//返回响应并停止while循环。
}
试一试{
Thread.sleep(6000);//6秒
}捕获(中断异常)
计数--;
}
请注意,除非http轮询调用是非阻塞的,否则上述操作将不起作用。也就是说,如果它在内部等待直到提供响应,它将无法工作。但通常在完成轮询调用时,应该有一种机制在某个点超时


编辑:我改变了两件事。在测试后,我移动了睡眠以获得回应。我修改了你测试平等性的方式(这可能是问题的一部分)。使用
equals
而不是
=
=用于比较字符串。

我不喜欢
Thread.sleep()
。如果您想这样做,请使用
java.util.Timer
而不是.Hi WJS-这个特定的http轮询不会自动超时。它将永远等待响应。然后必须有一种方法使用http调用的相关API配置超时。否则,投票服务就没有多大用处了。请记住,您在示例中没有正确比较字符串。你确定请求被阻止了吗?事实上,我建议你重新编辑你的问题,包括你用来检查回答的确切语法。实际上,我上面写的逻辑只是一个例子。我使用的代码在语法上是正确的。我的问题只是在轮询步骤超过30秒时才终止。此API是一个外部API。我没有权限更改API内部的任何配置。我只能使用它。嗨,markspace,使用计时器,我无法终止轮询的特定步骤。计时器也会等待,直到我收到来自轮询api的一些响应,并且该api不会自动超时。如果您确实在执行网络请求,那么我认为有一种方法可以将您的网络层配置为超时。这种方式看起来更加稳健和标准化。你能提供更多关于你在做什么的信息吗?