@Scheduled; @SchedulerLock

  1. scheduleAtFixedRate:

    • Этот метод планирует выполнение задач с фиксированным временным интервалом между началом одного выполнения и началом следующего.

    • Если задача выполняется дольше, чем указанный период, последующие выполнения будут запускаться немедленно, что может вызвать перекрытие выполнений.

    • Время следующего выполнения рассчитывается на основе времени начала предыдущего выполнения плюс фиксированный интервал, независимо от того, сколько времени фактически заняло выполнение задачи.

    • Пример:

      java
      ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); scheduler.scheduleAtFixedRate(() -> { // Логика вашей задачи }, начальная_задержка, период, TimeUnit.SECONDS);
  2. scheduleWithFixedDelay:

    • Этот метод планирует выполнение задач с фиксированной задержкой времени между завершением одного выполнения и началом следующего.

    • Если задача выполняется дольше, чем указанная задержка, следующее выполнение будет отложено до завершения предыдущего.

    • Время следующего выполнения рассчитывается на основе времени завершения предыдущего выполнения плюс фиксированная задержка.

    • Пример:

      java
      ScheduledExecutorService 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);
}

} 




















Комментарии

Популярные сообщения из этого блога

Lesson1: JDK, JVM, JRE

SE_21_Lesson_11: Inheritance, Polymorphism

SE_21_Lesson_9: Initialization Blocks, Wrapper types, String class