天天看點

使用 Timer 實作任務排程(定時任務)

1、 任務排程是指基于給定時間點,給定時間間隔或者給定執行次數自動執行任務。

2、Timer,來自java.util.Timer,它是最簡單的一種實作任務排程的方法。

       使用 Timer 實作任務排程的核心類是 Timer 和 TimerTask。其中 Timer 負責設定 TimerTask 的起始與間隔執行時間。使用者隻需要建立一個 TimerTask 的繼承類,實作自己的 run 方法,然後将其丢給 Timer 去執行即可。

package com.timer.test;


import java.util.Timer;
import java.util.TimerTask;


public class TimerTest extends TimerTask {
	private String jobName = "";
	
	public TimerTest(String jobName) {
		super();
		this.jobName = jobName;
	}


	@Override
	public void run() {
		System.out.println("執行:"+jobName);
	}


	public static void main(String[] args) {
		Timer timer= new Timer();
		long delay1=1000; //delay - 執行任務前的延遲時間,機關是毫秒。
        long period1=1000;//period - 執行各後續任務之間的時間間隔,機關是毫秒。
        //從現在開始,1 秒鐘之後執行,之後每隔 1 秒鐘執行一次 任務1對象
        timer.schedule(new TimerTest("任務1對象"), delay1, period1);
        long delay2=2000;
        long period2=2000;
        //從現在開始,2 秒鐘之後執行,之後每隔 2秒鐘執行一次 任務2對象
        timer.schedule(new TimerTest("任務2對象"), delay2, period2);	
        long delay3=1000;
        long period3=3000;
        //從現在開始,1 秒鐘之後執行,之後每隔 3秒鐘執行一次 任務3對象
        timer.schedule(new TimerTest("任務3對象"), delay3, period3);	
	}
	
/*	執行:任務1對象
	執行:任務3對象
	執行:任務2對象
	執行:任務1對象
	執行:任務1對象
	執行:任務1對象
	執行:任務3對象
	執行:任務2對象
	執行:任務1對象
	執行:任務1對象
	執行:任務2對象
	執行:任務3對象*/
}
           

3、Timer的優點在于簡單易用,但由于所有任務都是由同一個線程來排程,是以所有任務都是串行執行的,同一時間隻能有一個任務在執行,前一個任務的延遲或異常都将會影響到之後的任務。