Avatar
1
Huu Tuyen Nguyen Beginner
Sự khác biệt giữa Fix Rate và Fix Delay khi sử dụng @Scheduled spring boot
Mọi người phân biệt cho e giữa @fixedRate và @fixedDelay trong annotation @Scheduled spring boot. E cảm ơn.
  • Answer
spring boot schedule
Remain: 5
1 Answer
Avatar
tvd12 Beginner
tvd12 Beginner
  1. Fix rate: Có nghĩa là chạy theo đúng theo 1 khoảng thời gian, ví dụ:
  • Rate = 10
  • Task chạy hết 5 giây

Vậy schedule sẽ chỉ sleep 5 giây thôi, để đúng 10 giây lại chạy lại task 1 lần

  1. Fix delay: Có nghĩa là chờ task chạy xong và chờ tiếp 1 khoảng thời gian, ví dụ:
  • Delay = 10
  • Task chạy hết 5 giây

Vậy sleep sẽ vẫn sleep 10 giây, nghĩa là sau 15 giây sau task mới chạy tiếp

Ví dụ chương trình java:

public class FixRateAndFixDelay {

    public static void main(String[] args) {
        ScheduledExecutorService fixRate = Executors.newSingleThreadScheduledExecutor();
        AtomicLong fixRateStartTime = new AtomicLong();
        fixRate.scheduleAtFixedRate(() -> {
            long current = System.currentTimeMillis();
            if (fixRateStartTime.get() != 0) {
                long totalWaitTime = current - fixRateStartTime.get();
                System.out.println("fix rate - totalWaitTime: " + totalWaitTime/1000);
            }
            fixRateStartTime.set(current);
            sleep(5);
        }, 0, 10, TimeUnit.SECONDS);

        AtomicLong fixDelayTime = new AtomicLong();
        ScheduledExecutorService fixDelay = Executors.newSingleThreadScheduledExecutor();
        fixDelay.scheduleWithFixedDelay(() -> {
            long current = System.currentTimeMillis();
            if (fixDelayTime.get() != 0) {
                long totalWaitTime = current - fixDelayTime.get();
                System.out.println("fix delay - totalWaitTime: " + totalWaitTime/1000);
            }
            fixDelayTime.set(current);
            sleep(5);
        }, 0, 10, TimeUnit.SECONDS);
    }

    private static void sleep(int second) {
        try {
            Thread.sleep(second * 1000);
        } catch (InterruptedException e) {}
    }
}

Kết quả là:

fix rate - totalWaitTime: 10
fix delay - totalWaitTime: 15
  • 0
  • Reply