天天看点

使用 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的优点在于简单易用,但由于所有任务都是由同一个线程来调度,因此所有任务都是串行执行的,同一时间只能有一个任务在执行,前一个任务的延迟或异常都将会影响到之后的任务。