1. 程式人生 > >java中Timer定時器的使用和啟動

java中Timer定時器的使用和啟動

一.概述

定時計劃任務功能在Java中主要使用的就是Timer物件,它在內部使用多執行緒的方式進行處理,所以它和多執行緒技術還是有非常大的關聯的。在JDK中Timer類主要負責計劃任務的功能,也就是在指定的時間開始執行某一個任務,但封裝任務的類卻是TimerTask類。

二.應用場景

我們使用timer的時候,一般有4種情況:
1.指定時間執行;
2.指定時間執行後間隔指定時間重複執行;
3.啟動任務之後多久執行;
4.啟動任務後多久執行,執行之後指定間隔多久重複執行

三.使用方法

1.首先要通過繼承 TimerTask 類 並實現 run() 方法來自定義要執行的任務(當然也可以寫成匿名內部類),
2.需要建立一個定時器(Timer類物件),並通過Timer.schedule(TimerTask task,Date time) 方法執行時間執行任務
具體程式碼如下:

package timerdemo;

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

public class TimerDemo {
	public static void main(String[] args) {
		timerTest();
	}
	
	public static void timerTest(){
		//建立一個定時器
		Timer timer = new Timer();
		//schedule方法是執行時間定時任務的方法
		timer.schedule(new TimerTask() {
			
			//run方法就是具體需要定時執行的任務
			@Override
			public void run() {
				System.out.println("timer測試!!!");
			}
		}, 1000, 10000);
	}
}

這裡的 schedule方法有4個,分別對應上面說的四種情況:


四.啟動方法

1.在jar工程下啟動
把jar工程打成jar包,通過java -jar timer.jar 執行

2.這web工程下啟動
spring中我們可以通過實現介面ApplicationListener,並重寫public void onApplicationEvent(ApplicationEvent event) {}可以在容器初始話的時候執行這個方法
下面展示下web工程下每天00:00執行任務的程式碼:
 

@Component
public class SystemInitListener implements ApplicationListener<ContextRefreshedEvent> {

	@Override
	public void onApplicationEvent(ContextRefreshedEvent event) {
		
		//建立定時器
		Timer timer = new Timer();
		Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DATE,1);
        calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DATE),0,0,0);
        long timeInterval = 24 * 60 * 60 * 1000;
        timer.schedule(new TimerTask() {
			
			@Override
			public void run() {
				// 每天00:00需要做的事情
				
			}
		}, calendar.getTime(), timeInterval);