@Scheduled; @SchedulerLock
scheduleAtFixedRate
:Этот метод планирует выполнение задач с фиксированным временным интервалом между началом одного выполнения и началом следующего.
Если задача выполняется дольше, чем указанный период, последующие выполнения будут запускаться немедленно, что может вызвать перекрытие выполнений.
Время следующего выполнения рассчитывается на основе времени начала предыдущего выполнения плюс фиксированный интервал, независимо от того, сколько времени фактически заняло выполнение задачи.
Пример:
javaScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); scheduler.scheduleAtFixedRate(() -> { // Логика вашей задачи }, начальная_задержка, период, TimeUnit.SECONDS);
scheduleWithFixedDelay
:Этот метод планирует выполнение задач с фиксированной задержкой времени между завершением одного выполнения и началом следующего.
Если задача выполняется дольше, чем указанная задержка, следующее выполнение будет отложено до завершения предыдущего.
Время следующего выполнения рассчитывается на основе времени завершения предыдущего выполнения плюс фиксированная задержка.
Пример:
javaScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); scheduler.scheduleWithFixedDelay(() -> { // Логика вашей задачи }, начальная_задержка, задержка, TimeUnit.SECONDS);
В краткости, основное различие заключается в том, как они обрабатывают временные интервалы между выполнениями. scheduleAtFixedRate
использует фиксированный интервал между временами начала последовательных выполнений, тогда как scheduleWithFixedDelay
использует фиксированную задержку между временем завершения одного выполнения и временем начала следующего.
package com.example.service;
import net.javacrumbs.shedlock.spring.annotation.SchedulerLock;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class PriceSchedule {
public Long i = 0L;
// @Async
// @Scheduled(fixedRate = 1000)
@Scheduled(fixedDelay = 1000)
// @SchedulerLock(name = "parvin")
public void computePrice() throws Exception{
System.out.println(new Date().getSeconds());
Thread.sleep(2000);
}
}
Комментарии
Отправить комментарий