一、简介
使用Thread类可以做简单的定时任务,主要思路是创建一个无限循环的线程,使用sleep来进行时间间隔。
调度器Scheduler:创建的Thread类在就是调度器;
触发器Trigger:sleep的睡眠时间就是触发器,触发规则;
执行器executors:线程内执行的方法;
二、示例代码
public class MainApp {
public static void main(String[] args) {
init();
}
public static void init() {
new Thread(() -> {
while (true) {
try {
System.out.println(new Date()+" JAVA实现定时任务,每一分钟执行一次!");
Thread.sleep(1000 * 60 * 1);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
}
三、总结
使用Thread类可以做最简单的定时任务,在run方法中有个while的死循环(当然还有其他方式),执行我们自己的任务。有个需要特别注意的地方是,需要用try...catch捕获异常,否则如果出现异常,就直接退出循环,下次将无法继续执行了。
这种方式做的定时任务,只能周期性执行,不能支持定时在某个时间点执行(即使修改添加一些代码能实现,也不建议使用Thread去实现固定时间的定时)。
此外,该线程可以定义成守护线程,在后台默默执行就好。
使用场景:比如项目中有时需要每隔10分钟去聚合一次数据,每过3分钟检查一下状态,每个一天统计一天的数据生产报表等,一些简单的周期性任务场景。
使用Thread类的优缺点:
优点:这种定时任务非常简单,学习成本低,容易入手,对于那些简单的周期性任务,是个不错的选择,主要是时候自己做demo或者执行一些简单的任务,不建议用于工作项目中。
缺点:不支持指定某个时间点执行任务,不支持延迟执行等操作,如果任务执行时间过长也没用其他机制来保证任务的运行,功能过于单一,无法应对一些较为复杂的场景。