2015-05-20 56 views
2

我想定期运行相同的任务,但以不同的时间间隔运行。 例如对于(1s,2s,3s)方法应该在1s,3s,6s,7s之后调用。Java:以不同的时间间隔运行任务

通常我使用scheduleAtFixedRate,但是在通话之间有相同的时间。谢谢!

+0

1秒内完成任务吗? –

+0

是的,我想是这样的 – user2262230

+0

你是否考虑过任务需要一秒以上的场景,你是否希望在这种情况下开始下一个任务或等待前一个任务完成 –

回答

1

您可以scedule在1秒速度执行任务,使任务本身跳过不必要的时间

+0

似乎最简单的解决方案,没有其他任何依赖:) – user2262230

0

您可以使用Quartz with cron expressions

1,3,6,7,... * * * * * * 

安排在特定的时间间隔执行,在这种情况下,上秒1 ,每分钟,每小时,每天,每年,过去3,6和7分钟。

干杯

0

如果你的时间表可以被定义为一个cron expression,那么你可以尝试使用quartz scheduler。显然这可能意味着添加一个你尚未拥有的依赖关系,但它是一个成熟且使用良好的库,它专门设计用于根据比简单周期更复杂的计划执行任务。

0

最好的方法是使用Quartz。 但是,如果你不想引入任何依赖关系,你可以使用执行程序。它比计时器任务更新,更好。 检查这个例子

import java.util.concurrent.Executors; 
import java.util.concurrent.ScheduledExecutorService; 
import java.util.concurrent.TimeUnit; 

public class Task implements Runnable 
{  
    private int delay = 0; 

    public Task(int delay) 
    { 
     this.delay = delay; 
    } 

    public void registerNextExecution() 
    { 
     ScheduledExecutorService scheduledThreadPool = Executors.newSingleThreadScheduledExecutor(); 
     scheduledThreadPool.schedule(this, ++delay, TimeUnit.SECONDS); 
    } 

    @Override 
    public void run() 
    { 
     System.out.println("Execution at " + new Date()); 
     registerNextExecution(); 
    } 
} 

我没有测试过,但我相信这是一个很好的起点。

相关问题