SpringBoot——Scheduling Tasks 定时任务

1.在启动类配置开启Scheduling Task

2. 配置定时任务

3. 测试

启动SpringBoot的启动类

这个定时任务每五秒执行了一次

由此可见@Scheduled注解的fixRate是指定定时任务的运行间隔,即执行的频率

4.@Scheduled注解的字段

4.1 CRON_DISABLED

用于表示禁止使用Corn表达式

Corn表达式是一一种用于表达时间表的表达式,多用于定时任务规则的指定

4.2 cron

用于指定Cron表达式

4.3 zone

用于指定时区,默认是空串,表示使用默认时区

4.4 fixedRateString

作用与fixedRate相同,只不过是用字符串指定

执行结果依然是每5s执行一次

4.5 fixedDelay

当前任务执行完毕后,延迟指定的时间后才会开始执行下一次任务

4.6 initialDelay 

用于配置第一次任务开始之前的延迟时间

 5. Scheduling Tasks默认是单线程

定义两个任务

@Component
public class Task {
    @Scheduled(fixedRateString = "5000")
    public void shout1() throws InterruptedException {
        SimpleDateFormat sdf = new SimpleDateFormat("mm:ss");
        Date now = new Date();

        while (true) {
            Thread.sleep(1000);
            System.out.println(sdf.format(now) + " 任务1发出声响:" + "啊啊啊啊!!!!");
        }
    }

    @Scheduled(fixedRateString = "5000")
    public void shout2() throws InterruptedException {
        SimpleDateFormat sdf = new SimpleDateFormat("mm:ss");
        Date now = new Date();

        while (true) {
            Thread.sleep(1000);
            System.out.println(sdf.format(now) + " 任务2发出声响:" + "啊啊啊啊!!!!");
        }
    }
}

由于默认是单线程,shout1没有执行完,占有着线程,shout2无法执行。 

 5.1 设置线程数

5.1.1 @Bean设置

@Configuration
public class TaskConfig {
    @Bean
    public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
        ThreadPoolTaskScheduler tps = new ThreadPoolTaskScheduler();
        tps.setPoolSize(5);
        return tps;
    }
}

5.1.2 实现SchedulingConfigurer接口

@Configuration
public class TaskConfig implements SchedulingConfigurer {
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        ThreadPoolTaskScheduler tps = new ThreadPoolTaskScheduler();
        tps.setPoolSize(5);
        tps.initialize();
        taskRegistrar.setTaskScheduler(tps);
    }
}

 5.1.3 一个线程处理一个任务

虽然我们可以设置多个线程来处理任务,但是对于一个任务,只会分配一个线程去处理任务。

注释掉任务2,只保留任务1

依然保持线程池大小为5

 运行结果:

可以看到虽然设置了线程数是5,当我们设置的的定时时间到了之后,之前的任务还没有完成, 也不会使用新的线程来处理任务。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值