强制方法在指定的时间间隔内运行

时间:2011-10-26 15:05:37

标签: java

我想强制方法运行指定的时间。

 public Response run(Request req){
    //method runImpl must run during specified interval of time(for example for 10 secs)
    Response res = runImpl(req);
    return response;
    }

这样做的最佳方式是什么?谢谢!

4 个答案:

答案 0 :(得分:3)

尝试使用它:

poolExecutor = new ScheduledThreadPoolExecutor(1);
poolExecutor.scheduleAtFixedRate(
        new YourRunable(), startFrom/*10*/, startEvery/*5*/, TimeUnit.SECONDS);

答案 1 :(得分:2)

runImpl应返回一个布尔值,以使此代码生效。如果您不希望程序在完成之前停止运行,您可能会想要在新的Thread(基本教程)中使用它。

public Response run(Request req){
long lasttime=Sys.getTime();
int i=0;
while(i<10){
   if(Response res = runImpl(req);){
   return response;
   }
   if((Sys.getTime-lasttime)>1000){
   i++;
   lasttime=Sys.getTime();
   }
}
return null;

这会运行每个处理器时刻,如果您希望它运行间隔为AS WELL,运行10秒,请使用:

public Response run(Request req){
long lasttime=Sys.getTime();
int i=0;
for(int i; i<(10000/yourchoiceinterval); i++){
   if(Response res = runImpl(req);){
   return response;
   }
   if((Sys.getTime-lasttime)>1000){
   lasttime=Sys.getTime();
   }
}
return null;

答案 2 :(得分:1)

最好的方法是让你的工作成适当大小的块,所以每个块可以在1秒内完成。这样,在每个块的末尾,您可以检查时间是否已过去。

如果您的工作涉及可以无限期阻止的I / O工作,请尝试使用可中断的方法(可以通过调用Thread.interrupt()来中断)或接受来自调用者的显式最大运行时间的方法。 /> 或者您可以将I / O工作委托给某个专用线程并在单独的线程中检查它的进度,并在超出运行时间时采取适当的行动。

答案 3 :(得分:0)

您可以启动一个只调用您的方法的新线程,并在您创建的计时器到期后将其置于休眠状态。虽然你不能保证方法循环在挂起之前已经完成,但是不必修改方法就可以了。为了实现循环,只需将此逻辑放入线程循环中即可。只记得唤醒线程

可能有很多实现,因为你没有说清楚。

相关问题