Java: 运行 不同时间间隔的任务
Java: Running task at different intervals
我想 运行 定期执行相同的任务,但间隔时间不同。
例如for (1s, 2s, 3s) 方法应在 1s、3s、6s、7s 等之后调用。
通常我使用scheduleAtFixedRate
,但调用之间的时间相同。谢谢!
您可以安排任务以 1 秒的速度执行并使任务本身跳过不需要的时间
你可以使用Quartz with cron expressions喜欢
1,3,6,7,... * * * * * *
安排在特定时间间隔执行,在本例中为每分钟、每小时、每天、每年的第 1、3、6 和 7 秒。
干杯
如果你的日程可以定义为cron expression, then you could try using quartz scheduler。显然,这可能意味着添加您还没有的依赖项,但它是一个成熟且使用良好的库,它专门设计用于根据比简单的周期性更复杂的计划执行任务。
最好的方法是使用 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();
}
}
我还没有测试过,但我相信这是一个很好的起点。
我想 运行 定期执行相同的任务,但间隔时间不同。 例如for (1s, 2s, 3s) 方法应在 1s、3s、6s、7s 等之后调用。
通常我使用scheduleAtFixedRate
,但调用之间的时间相同。谢谢!
您可以安排任务以 1 秒的速度执行并使任务本身跳过不需要的时间
你可以使用Quartz with cron expressions喜欢
1,3,6,7,... * * * * * *
安排在特定时间间隔执行,在本例中为每分钟、每小时、每天、每年的第 1、3、6 和 7 秒。
干杯
如果你的日程可以定义为cron expression, then you could try using quartz scheduler。显然,这可能意味着添加您还没有的依赖项,但它是一个成熟且使用良好的库,它专门设计用于根据比简单的周期性更复杂的计划执行任务。
最好的方法是使用 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();
}
}
我还没有测试过,但我相信这是一个很好的起点。