Java: выполнение задачи с различными интервалами


Я хочу периодически запускать одну и ту же задачу, но с разными интервалами. например, для (1s, 2s, 3s) метод должен быть вызван после 1s, 3s, 6s, 7s и так далее.

Обычно я использую scheduleAtFixedRate, но с одинаковым временем между вызовами. Спасибо!

4 2

4 ответа:

Вы можете запланировать выполнение задачи со скоростью 1 сек и заставить саму задачу пропустить ненужное время

Если ваше расписание можно определить как выражение cron, то вы можете попробовать использовать Quartz scheduler. Очевидно, что это может означать добавление зависимости, которой у вас еще нет, но это зрелая и хорошо используемая библиотека, и она разработана специально для выполнения задач, основанных на более сложном расписании, чем просто периодические.

Лучший способ-использовать кварц. Но если вы не хотите вводить какие-либо зависимости, вы можете использовать executor. Это новее и лучше, чем задача таймера. Проверьте этот пример

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();
    }
}
Я не проверял его, но считаю, что это хорошая отправная точка.

Вы можете использовать кварц с выражениями cron как

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

Планировать исполнение на определенные интервалы, в данном случае на секунды 1, 3, 6 и 7 после каждой минуты, часа, дня, года.

Ура