1. 程式人生 > >java-定時任務排程工具Timer/Quartz|springboot整合定時排程

java-定時任務排程工具Timer/Quartz|springboot整合定時排程

什麼是定時任務排程

定時任務排程:基於給定的時間點,給定的時間間隔或者給定的執行次數自動執行任務。

兩種java定時任務排程工具卻別

Timer Quartz
小弟!功能簡單,開銷小 大哥!強大完善
jdk1.5 需要引入jar包
一個後臺執行緒 後臺執行執行緒池

Timer

簡介:

有且僅有一個後臺執行緒,對多個業務執行緒進行定時定頻率的排程

主要構件:

Timer類中兩個成員變數:

  1. TimerThread後臺執行緒
  2. TaskQueue成員TimerTask[]

TimerThread的run方法來回呼叫TimerTask的run方法 總之,Timer–定時呼叫 TimerTask

實現

編寫MyTimerTask類繼承TimerTask類並重寫run()方法,然後用Timer呼叫schedule方法來執行任務

import java.util.TimerTask;
public class MyTimerTask extends TimerTask{
	private String name;
	public MyTimerTask(String name){
		this,name = name;
	}
	@Override
	public void run(){
		System.out.println("This thread is " + this,name)
; } //set get }

Timer類

public class MyTimer{
	public static void main(String[] args){
		Timer timer = new Timer();
		MyTimerTask myTimerTask = new MyTimerTask ("name1");
		//通過timer定時呼叫myTimerTask的run
		//2秒之後執行,此後每3秒執行一次
		timer.schedule(myTimerTask,2000L,3000L);
	}
}

當然,還有其他schedule其他用法 1.timer.schedule(task,time);//time距1970年的毫秒數,只執行一次 2.timer.schedule(task,time,period);//time首次執行任務時間,每隔period毫秒再執行 3.timer.schedule(task,delay);//等待delay毫秒後,執行且僅執行一次task 4.timer.schedule(task,delay,period);/等待delay毫秒後,每隔period毫秒再執行 scheduleAtFixedRate的兩種用法(暫時理解為同上) 1.timer.scheduleAtFixedRate(task,time,period);//和上面第二種方法一樣 2.timer.scheduleAtFixedRate(task,delay,period);//和上面第四種方法一樣

其他重要函式

TimerTask的兩個函式

  • cancel() 取消當前TimerTask裡的任務[在類裡執行]
  • scheduledExecutionTime(),返回最近發生此任務的時間 毫秒[在主方法裡執行myTimerTask.scheduledExecutionTime()]
import java.util.TimerTask;
public class MyTimerTask extends TimerTask{
	private String name;
	private int count = 0;
	public MyTimerTask(String name){
		this,name = name;
	}
	@Override
	public void run(){
		System.out.println("This thread is " + this,name);
		count++;
		if(count==3){
			//□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
			cancel();//取消當前任務執行!!!!!!!!!!!!!!!!
			//□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
		}
	}
	//set get
}

Timer的兩個函式

  • cancel() 中止所有安排的任務
  • purge() 移除佇列中已取消的任務,返回溢位的任務數