Я пытаюсь создать запланированное задание, которое будет выполняться каждые 5 минут с 7:00 до 22:00 каждый день. Например, он должен работать в 7:00, 7:05, 7:10 ... 21:55, и тогда он должен остановиться в 22:00. На следующем он запускает тот же график снова и так далее.
Я нашел этот пример, который показывает, как использовать ScheduledExecutorService
для запуска задачи в определенное время.
Как запускать определенную задачу каждый день в определенное время, используя ScheduledExecutorService?
Я сослался на ответ и написал свой код, как показано ниже:
(Я использую Java 7)
class Scheduler {
private ScheduledExecutorService executors;
public static void main(String[] arg) {
Runnable task = new Runnable() {
@Override
public void run() {
...DO SOMETHING...
}
};
// Get how many seconds before the next start time (7AM).
long initDelay = getInitialDelay(7);
ScheduledExecutorService executors = Executors.newSingleThreadScheduledExecutor();
executors.scheduleAtFixedRate(task, initDelay, (60 * 5), TimeUnit.SECONDS);
}
private static long getInitialDelay(int hour) {
Calendar calNow = Calendar.getInstance();
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, hour);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
long diff = cal.getTimeInMillis() - calNow.getTimeInMillis();
if (diff < 0) {
cal.add(Calendar.DAY_OF_MONTH, 1);
diff = cal.getTimeInMillis() - calNow.getTimeInMillis();
}
return diff / 1000;
}
}
Мой код выше начинается в 7 часов утра и отлично работает каждые 5 минут. Тем не менее, как я могу управлять ScheduledExecuterService
, чтобы остановить задачу в 22:00, а затем начать снова в 7:00 на следующий день?
Или есть ли какой-нибудь лучший способ выполнять задачу каждый день в определенный период времени?