java 定時任務scheduleAtFixedRate 與 scheduleWithFixedDelay區別
阿新 • • 發佈:2018-12-31
1、scheduleAtFixedRate 方法,顧名思義,它的方法名稱的意思是:已固定的頻率來執行某項計劃(任務)。
2、scheduleWithFixedDealy,相對固定的延遲後,執行某項計劃。
還是比較簡單明瞭的描述比較好:第一個方法是固定的頻率來執行某項計劃,它不受計劃執行時間的影響。到時間,它就執行。
執行結果:
2、scheduleWithFixedDealy,相對固定的延遲後,執行某項計劃。
還是比較簡單明瞭的描述比較好:第一個方法是固定的頻率來執行某項計劃,它不受計劃執行時間的影響。到時間,它就執行。
而第二個方法,相對固定,據鄙人理解,是相對任務的。即無論某個任務執行多長時間,等執行完了,我再延遲指定的時間。也就是第二個方法,它受計劃執行時間的影響。
package com; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class TestscheduleAtFixedRate { public static void main(String[] args) { // TODO 自動生成的方法存根 ScheduledExecutorService executor=Executors.newScheduledThreadPool(2); long startTime=System.currentTimeMillis(); // executor.scheduleAtFixedRate(command, initialDelay, period, unit) executor.scheduleWithFixedDelay(new MyRunableA_atfix(), 0, 2, TimeUnit.SECONDS); System.out.println("A"+(System.currentTimeMillis()-startTime)); } } class MyRunableA_atfix implements Runnable{ @Override public void run() { // TODO 自動生成的方法存根 long startTime=System.currentTimeMillis(); System.out.println(startTime); //System.out.println("begin A "+System.currentTimeMillis()); try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO 自動生成的 catch 塊 e.printStackTrace(); } System.out.println(System.currentTimeMillis()-startTime); // System.out.println("end A "+System.currentTimeMillis()); } }
執行結果:
A1
1506748405777
2001
1506748409778
2001
1506748413780
2001