首頁 >Java >java教程 >Java中的scheduleAtFixedRate怎麼使用

Java中的scheduleAtFixedRate怎麼使用

WBOY
WBOY轉載
2023-06-03 12:37:511470瀏覽

scheduleAtFixedRate(task,time,period)

task-所要安排的任務time-首次執行任務的時間period-執行一次task的時間間隔,單位毫秒

作用:時間等於或超過time首次執行task,之後每隔period毫秒重複執行task

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;
 
public class MyTimerTask extends TimerTask {
    @Override
    public void run() {
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
        System.out.println("Current Time:"+format.format(calendar.getTime()));//获取当前系统时间
        System.out.println("NO.1");
    }
    public static void main(String[] args) {
        MyTimerTask task = new MyTimerTask();
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
        System.out.println(format.format(calendar.getTime()));
        calendar.add(Calendar.SECOND,3);//获取距离当前时间3秒后的时间
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(task,calendar.getTime(),2000);
    }
}

scheduleAtFixedRate(task, delay,period)

task-所要執行的任務delay-執行任務的延遲時間,單位毫秒period-執行一次task的時間間隔

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;
 
public class MyTimerTask extends TimerTask {
    @Override
    public void run() {
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
        System.out.println("Current Time:"+format.format(calendar.getTime()));//获取当前系统时间
        System.out.println("NO.1");
    }
    public static void main(String[] args) {
        MyTimerTask task = new MyTimerTask();
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
        System.out.println(format.format(calendar.getTime()));
        calendar.add(Calendar.SECOND,3);//获取距离当前时间3秒后的时间
        Timer timer = new Timer();
        //timer.scheduleAtFixedRate(task,calendar.getTime(),2000);
        timer.scheduleAtFixedRate(task,1000,2000);
    }
}

scheduleAtFixedRate和scheduleWithFixedDelay的區別

 1)scheduleAtFixedRate:可以傳入runnable,定制第一次的初始化執行時間,週期時間,初始化執行時間,週期時間,可以傳入runnable,定制第一次的初始化執行時間,週期時間,初始化執行時間,週期時間,單位時間-------創建並執行一個週期性任務,過了給定的初始延遲時間(1min執行一次or其他時間),會第一次被執行。執行過程中發生異常,任務停止。

2)scheduleWithFixedDelay:和上一種相類似-----創建並執行週期性任務,第一次執行及異常情況

A:1s中執行一個任務,每個任務執行時間500ms====兩種無區別

B:執行任務時間過長,如間隔時間是1s,而執行時間3s====該情況下有區別,主要在周期時間的差異

scheduleWithFixedDelay該方法中一次任務執行時長超過週期時間,下一次任務會在該次任務執行結束時間基礎上,計算執行延時(舉例子:如間隔時間是1s,而執行時間3s,當前10:03時觸發執行,理論而言,10:04時應執行新任務,但透過該方法執行,執行結束時為10:06,在10:06的基礎上延遲1s執行新任務)

scheduleAtFixedRate此方法(舉例:如間隔時間是1s,而執行時間3s,當前10:03時觸發執行,10:06執行結束,10:04及10:05累積的任務會立刻執行,而非在10:06的基礎上增加延時時間)

以上是Java中的scheduleAtFixedRate怎麼使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除