2

我有一个 Runnable 类,它需要在上次运行后的设定间隔后运行。示例: ProcessThread 在完成后每 2 分钟运行一次。因此,如果我在 1:00 启动 ProcessThread,并且它需要 5 分钟(在 1:05 结束),那么下一次它应该运行将在 1:07。如果那个需要 3 分钟运行,(在 1:10 结束),下一个从 1:12 开始)等等..

我无法将其设置为 2 分钟的固定速率,因为这样会触发第二个线程,而第一个线程尚未完成。

所以,这是我当前的代码,但我拥有它的方式,它不断创建线程并且永远不会完成它们......所以最终我的记忆不断增长:

主要的:

public class MyMain extends Thread{
   public static void main(String[] args)  {        

    ExecuteThread execute = new ExecuteThread();
    execute.start();
   }
}

ExecuteThread(我拿出了try-catch):

public void run() {

      MyProcessThread myProcess = new MyProcessThread();
      ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();

      myProcess.start();
      while(myProcess.isAlive()){
         sleep(10000);
      }

      scheduler.schedule(this,myProcess.getDelaySeconds(),TimeUnit.SECONDS);

}

在我让调度程序在 MyProcessThread 中运行之前,但结果相同。这看起来是正确的方向,但仍然有问题。

4

2 回答 2

4

你可以做

scheduledExecutorService = Executors.newScheduledThreadPool(1);
scheduledExecutorService.scheduleWithFixedDelay(command, 0, 2, TimeUnit.MINUTES);

这将创建一个执行程序,该执行程序将在上一次运行完成command后 2 分钟运行。在此处command查看文档。

这是它的一个片段。

创建并执行一个周期性操作,该操作首先在给定的初始延迟之后启用,随后在一个执行终止和下一个执行开始之间具有给定的延迟。如果任务的任何执行遇到异常,则后续执行将被抑制。否则,任务只会通过取消或终止执行者来终止。

考虑最后一句关于命令是否有任何异常!

于 2011-03-09T12:17:00.027 回答
1

您可以finally在 MyProcessThread 中安排下一次执行。

于 2011-03-09T12:12:46.927 回答