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--->完成了一个数据备份* ...........*/
}