我终于会写 Java 的定时任务了!( 四 )

控制台输出:
2022-10-25 14:54:04.824INFO 23520 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务开始------- 2022-10-25T14:54:04.8242022-10-25 14:54:05.833INFO 23520 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务完成------- 2022-10-25T14:54:05.8332022-10-25 14:54:09.834INFO 23520 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务开始------- 2022-10-25T14:54:09.8342022-10-25 14:54:10.843INFO 23520 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务完成------- 2022-10-25T14:54:10.843当然,如果任务的处理逻辑超过了固定的频率时间,比如我们修改下 Thread.sleep(1000),模拟成 6 秒,即 Thread.sleep(6000),那么输出如下:
2022-10-25 14:57:04.212INFO 9324 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务开始------- 2022-10-25T14:57:04.2122022-10-25 14:57:10.227INFO 9324 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务完成------- 2022-10-25T14:57:10.2272022-10-25 14:57:10.227INFO 9324 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务开始------- 2022-10-25T14:57:10.2272022-10-25 14:57:16.241INFO 9324 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务完成------- 2022-10-25T14:57:16.2412022-10-25 14:57:16.242INFO 9324 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务开始------- 2022-10-25T14:57:16.2422022-10-25 14:57:22.243INFO 9324 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务完成------- 2022-10-25T14:57:22.2432022-10-25 14:57:22.243INFO 9324 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务开始------- 2022-10-25T14:57:22.243可以发现,当前任务一完成就会立刻执行下一次任务,这就是当任务的处理逻辑超过了固定的频率时间会出现的情况 。
fixedDelay@Slf4j@Component@EnableSchedulingpublic class TaskDemo {/*** 执行完成后间隔2秒执行下一次**/@Scheduled(fixedDelay = 2000)public void printTime2() throws InterruptedException {log.info("任务开始------- {}", LocalDateTime.now());Thread.sleep(4000);log.info("任务完成------- {}", LocalDateTime.now());}}控制台输出:
2022-10-25 14:55:50.973INFO 22128 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务开始------- 2022-10-25T14:55:50.9732022-10-25 14:55:54.977INFO 22128 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务完成------- 2022-10-25T14:55:54.9772022-10-25 14:55:56.987INFO 22128 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务开始------- 2022-10-25T14:55:56.9872022-10-25 14:56:01.001INFO 22128 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务完成------- 2022-10-25T14:56:01.0012022-10-25 14:56:03.012INFO 22128 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务开始------- 2022-10-25T14:56:03.012多个定时任务的执行同步如果我们写多个定时任务,那么它们只会同步执行,如下:
@Slf4j@Component@EnableSchedulingpublic class TaskDemo {@Scheduled(fixedRate = 2000)public void printTime3() throws InterruptedException {log.info("任务A开始------- {}", LocalDateTime.now());Thread.sleep(2000);log.info("任务A完成------- {}", LocalDateTime.now());}@Scheduled(fixedDelay = 2000)public void printTime4() throws InterruptedException {log.info("任务B开始------- {}", LocalDateTime.now());Thread.sleep(2000);log.info("任务B完成------- {}", LocalDateTime.now());}}控制台输出:
2022-10-25 14:59:14.279INFO 21588 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务A开始------- 2022-10-25T14:59:14.2792022-10-25 14:59:16.283INFO 21588 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务A完成------- 2022-10-25T14:59:16.2832022-10-25 14:59:16.283INFO 21588 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务B开始------- 2022-10-25T14:59:16.2832022-10-25 14:59:18.288INFO 21588 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务B完成------- 2022-10-25T14:59:18.2882022-10-25 14:59:18.288INFO 21588 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务A开始------- 2022-10-25T14:59:18.2882022-10-25 14:59:20.301INFO 21588 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务A完成------- 2022-10-25T14:59:20.3012022-10-25 14:59:20.301INFO 21588 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务A开始------- 2022-10-25T14:59:20.3012022-10-25 14:59:22.307INFO 21588 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务A完成------- 2022-10-25T14:59:22.3072022-10-25 14:59:22.307INFO 21588 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务A开始------- 2022-10-25T14:59:22.3072022-10-25 14:59:24.323INFO 21588 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务A完成------- 2022-10-25T14:59:24.3232022-10-25 14:59:24.323INFO 21588 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务B开始------- 2022-10-25T14:59:24.3232022-10-25 14:59:26.337INFO 21588 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务B完成------- 2022-10-25T14:59:26.337可以看到,只有某一个任务完成后,下一个任务才会执行 。

推荐阅读