Java 定時器
package com.su.test.threadtest;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
/**
在這里插入代碼片
使用定時器指定定時任務。- timer:計時器
/
public class TimerTest {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
try {
Date date = sdf.parse(“2022-01-31 23:30:00”);
// 創建定時器對象
Timer t = new Timer();
//t.schedule(定時任務, 第一次執行時間, 間隔多久執行一次);
t.schedule(new LogTimerTask(), date, 1000 * 5);
} catch (ParseException e) {
e.printStackTrace();
}
/*
* 控制臺顯示:
* 2024-03-03 21:57:44 430—>完成了一個數據備份
* 2024-03-03 21:57:49 432—>完成了一個數據備份
* 2024-03-03 21:57:54 443—>完成了一個數據備份
* 2024-03-03 21:57:59 451—>完成了一個數據備份
* 2024-03-03 21:58:04 464—>完成了一個數據備份
* …
*/
}
}
/**
-
編寫一個定時任務類
-
假設這是一個記錄日志的定時任務
*/
class LogTimerTask extends TimerTask {// 編寫要執行的任務
@Override
public void run() {
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss SSS”);
String nowTime = sdf.format(new Date());
System.out.println(nowTime + “—>” + “完成了一個數據備份”);
}
}
// 守護線程的方式創建定時器指定定時任務
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
try {
Date date = sdf.parse(“2022-01-31 23:30:00”);
// 創建定時器對象
// 守護線程的方式,public Timer(boolean isDaemon) {this(“Timer-” + serialNumber(), isDaemon);}
Timer t = new Timer(true);
//t.schedule(定時任務, 第一次執行時間, 間隔多久執行一次);
t.schedule(new LogTimerTask(), date, 1000 * 5);
} catch (ParseException e) {
e.printStackTrace();
}
/**
* 即使是死循環,由于該線程是守護著,當用戶線程結束,守護線程自動終止
* 控制臺顯示(控制臺什么都沒有):
*
*/
}
// 匿名內部類的方式實現使用定時器指定定時任務;守護線程的方式,控制臺什么都沒有同上
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
try {
Date date = sdf.parse(“2022-01-31 23:30:00”);
// 創建定時器對象
Timer t = new Timer();
/**
* 也可以采用如下匿名內部類,
* TimerTask是一個抽象類,抽象類和接口都有構造方法,但不能實例化
* 以下是通過匿名內部類,即沒有名字的類,通過new創建對象
*/
t.schedule(new TimerTask() {
@Override
public void run() {
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss SSS”);
String nowTime = sdf.format(new Date());
System.out.println(nowTime + “—>” + “完成了一個數據備份”);
}
}, date, 1000 * 5);
} catch (ParseException e) {e.printStackTrace();}/*** 控制臺顯示:* 2024-03-03 22:17:26 307--->完成了一個數據備份* 2024-03-03 22:17:31 314--->完成了一個數據備份* 2024-03-03 22:17:36 317--->完成了一個數據備份* 2024-03-03 22:17:41 329--->完成了一個數據備份* 2024-03-03 22:17:46 338--->完成了一個數據備份* ...........*/
}