当程序的某些功能在需要特定时间触发执行时,通过定时任务就很好解决。定时任务随着技术的发展,也向功能更强大,实用性,使用更简单的方向发展。
1. Timer
这是Java自带的定时任务实现类,使用方便,无需任何其他的配置,通过重写TimerTask 类的run方法,可实现定时任务的具体执行任务。但是Timer在有多个定时任务时,如果定时任务执行时间长于任务定时间隔,将会影响其他任务的定时执行时间;同时,程序某个定时任务出现异常后,将影响所有定时任务。
public class TimerTaskTest {
public static void main(String[] args) {
// 定义一个任务,并重写run方法
TimerTask timerTask1 = new TimerTask() {
@Override
public void run() {
System.out.println("task1:" + new Date());
}
};
// 定义一个任务,并重写run方法
TimerTask timerTask2 = new TimerTask() {
@Override
public void run() {
System.out.println("task1:" + new Date());
}
};
// 计时器
Timer timer1 = new Timer();
Timer timer2 = new Timer();
// 添加执行任务1,单位为毫秒(延迟 1s 执行,每 3s 执行一次)
timer1.schedule(timerTask1, 1000, 3000);
// 添加执行任务2,单位为毫秒(从指定时间开始,每3s执行一次),第二个入参可指定具体时间
timer2.scheduleAtFixedRate(timerTask2, new Date(), 3000);
}
}
2. ScheduledExecutorService
ScheduledExecutorService 也是Java自带的定时任务实现类,它不但具备与Timer一样的功能,还解决了Timer出现的问题。它是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,任务是并发执行,互不影响。
3. Spring Task
Spring Task 是Spring框架自带的定时任务,其功能比 Timer, ScheduledExecutorService功能更加强大,同时,使用 Cron 表达式,定时任务执行规则的设定更为方便,灵活。
实现方式:
- 启动类上声明 @EnableScheduling;
- 定时任务方法上加 @Scheduled 注解标注(多个定时任务可以创建多个 @Scheduled 注解标注)
- 编写cron表达式,设定具体的定时任务执行规则

4. Quartz
Quartz是OpenSymphony的开源项目,它完全由 Java 编写的开源作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。

本文介绍了Java中的定时任务实现方法,包括Timer、ScheduledExecutorService、SpringTask及Quartz等技术。探讨了各自的优缺点及应用场景。

1006

被折叠的 条评论
为什么被折叠?



