Java定时任务

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

当程序的某些功能在需要特定时间触发执行时,通过定时任务就很好解决。定时任务随着技术的发展,也向功能更强大,实用性,使用更简单的方向发展。

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 应用程序中进行作业调度提供了简单却强大的机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值