Java: выполнение задачи с различными интервалами
Я хочу периодически запускать одну и ту же задачу, но с разными интервалами. например, для (1s, 2s, 3s) метод должен быть вызван после 1s, 3s, 6s, 7s и так далее.
Обычно я использую scheduleAtFixedRate
, но с одинаковым временем между вызовами. Спасибо!
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 после каждой минуты, часа, дня, года.
Ура