項目中,一般要使用定時任務的話,大家的第一反應都是Quartz框架,今天發現其實java本身也是可以做定時任務的,雖然功能沒有Quartz強大,但也說明Java的生態完整,功能強大。
1、簡介:
Timer是一種工具,線程用其安排以後在後臺線程中執行的任務。可安排任務執行一次,或者定期重複執行。實際上是個線程,定時調度所擁有的TimerTasks。
TimerTask是一個抽象類,它的子類由 Timer 安排爲一次執行或重複執行的任務。實際上就是一個擁有run方法的類,需要定時執行的代碼放到run方法體內。
2、代碼實現:
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import junit.framework.TestCase;
/**
* @Description java原生Timer實現定時任務
*/
public class TestTimer extends TestCase{
private static int count = 1; // 記錄定時任務執行次數
private static long delay = 1000L; // 定時任務延遲執行時間(毫秒)
private static long period = 5000L; // 定時任務執行時間間隔(毫秒)
public void testTime() throws InterruptedException{
Timer timer = new Timer();
// 創建一個計時器,重寫run方法
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
System.out.println("第" + count++ + "次執行定時任務,執行時間:" + date);
}
};
// 1、schedule(TimerTask task, Date time) 安排在指定的時間執行指定的任務
// Calendar calendar = Calendar.getInstance();
// calendar.set(Calendar.MINUTE, 26);
// timer.schedule(timerTask,calendar.getTime());
// 2、schedule(TimerTask task, Date firstTime, long period) 安排指定的任務在指定的時間開始進行重複的固定延遲執行
// timer.schedule(timerTask, new Date(), period);
// 3、schedule(TimerTask task, long delay) 安排在指定延遲後執行指定的任務
// timer.schedule(timerTask, delay);
// 4、schedule(TimerTask task, long delay, long period) 安排指定的任務從指定的延遲後開始進行重複的固定延遲執行
timer.schedule(timerTask, delay, period);
synchronized (TestTimer.class) {
try {
TestTimer.class.wait();
} catch (Throwable e) {
System.out.println(e);
}
}
}
}