SpringTask无疑是Spring环境下单机定时任务的首选。它使用起来非常简单,功能也足够。SpringTask具有三种模式,分别是:fixedDelay、cron和fixedRate。话不多说,先看代码:@Slf4j@ComponentpublicclassTimeTask{privateint[]people={6,2,3,1};私人整数计数=0;@Scheduled(fixedDelay=5000)publicvoidfixedDelayTask()throwsInterruptedException{if(count<4){inttimeConsuming=people[count];log.info("fixedDelayTask-----第{}个人在{}开始如厕,耗时:{}秒",count+1,formatTime(),timeConsuming);Thread.sleep(timeConsuming*1000L);计数++;}}@Scheduled(cron="0/5****?")publicvoidcronTask()throwsInterruptedException{if(count<4){inttimeConsuming=people[count];log.info("cronTask-----第{}个人在{}开始上厕所,耗时:{}秒",count+1,formatTime(),timeConsuming);Thread.sleep(timeConsuming*1000L);计数++;}}@Scheduled(fixedRate=5000)publicvoidfixedRateTask()抛出InterruptedException{if(count<4){inttimeConsuming=people[count];log.info("fixedRateTask-----人{}在{}开始上厕所,耗时:{}秒",count+1,formatTime(),timeConsuming);Thread.sleep(timeConsuming*1000L);计数++;}}privateStringformatTime(){returnLocalTime.now().format(DateTimeFormatter.ofPattern("HH:mm:ss"));}}这三种模式的用法很简单,用法也很相似。那么它们之间有什么区别呢?我们通过一个五星级豪华公测的故事来说明。故事背景是某地有一座五星级的豪华厕所,大家都喜欢来这里上厕所。所以地坑经常供不应求,上厕所需要排队。一天,有四个人在厕所外排队,每个人上厕所所需时间如下:第一个人6秒,第二个人2秒,第三个人3秒,第四个人1秒第二,从第一人称开始。上厕所是定时的。fixedDelay模式日志输出:fixedDelayTask-----第一个人18:07:23开始上厕所,耗时:6秒fixedDelayTask-----第二个人18点开始上厕所:07:34,耗时:2秒fixedDelayTask-----第三个人开始上厕所18:07:41,耗时:3秒fixedDelayTask-----第四个人开始上厕所18:07:49上厕所,耗时:1秒@Scheduled(fixedDelay=5000)。马桶在该模式下有一个特点:每次使用马桶后,马桶需要5秒时间进行自我清洁,需要对马桶进行清洗消毒,以保证使用时依然干净卫生。下次使用。执行如图:第一个人0秒开始用马桶,6秒后结束,马桶需要5秒自己打扫。第二个人在11秒(6+5)开始使用马桶,并在2秒后结束,马桶需要5秒来清洁自己。第三个人在18秒(11+2+5)开始使用马桶,3秒后结束,马桶需要5秒的自洁时间。第四个人26秒(18+3+5)开始上厕所,1秒后结束...cron模式日志输出:cronTask-----第一个人18:09开始上厕所:15,耗时:6秒cronTask-----第二个人18:09:25开始上厕所,耗时:2秒cronTask-----第三个人开始上厕所thetoiletat18:09:30,time-consumed:3SecondscronTask-----第四个人18:09:35开始上厕所,耗时:1秒@Scheduled(cron="0/5****?”)。该模式下,厕所只有在时间为5秒的整数倍时才允许进入和使用。因为经过严谨的科学分析,发现秒数为5的整数倍时,卫生间体验更好,所以只有当前时间为5秒的整数倍时才能进入。此外,五星级豪华公厕升级设备,可在马桶使用瞬间完成自洁消毒,无需额外自洁时间,马桶利用率也得到提升。执行如图:第一个人18:09:15开始上厕所,6秒后结束(18:09:21),下一个上厕所的吉时为18:09:25。第二个人18:09:25开始上厕所,2秒后结束(18:09:27),下一个上厕所的吉时是18:09:30。第三个人18:09:30开始上厕所,3秒后结束(18:09:33),下一个上厕所的吉时是18:09:35。第四个人18:09:35开始上厕所,1秒后结束(18:09:36)...fixedRate模式日志输出:fixedRateTask-----第一个人开始上厕所时间18:10:18,耗时:6秒fixedRateTask-----第二个人18:10:24开始上厕所,耗时:2秒fixedRateTask-----第三个人开始上厕所18:10:28tothetoilet,time-consumed:3secondsfixedRateTask-----第4个人18:10:33开始上厕所,耗时:1秒@Scheduled(fixedRate=5000).经过长时间的大数据分析,得出了一个结论——一个人上厕所的最佳时间是5秒。因此,在这种模式下,在人们上厕所之前,厕所会根据等待的人数提前制定一个如厕计划,即为每个等待的人分配5秒的上厕所时间。但有一个规律:上厕所的人提早完事,下一个人还需要等5秒;当上厕所的人超时时,上一个人用完后,上厕所的人可以立即上厕所。那么:卫生间方案如下:第一个人:0秒进入第二个人:5秒进入第三个人:10秒进入第四个人:15秒进入根据如厕时间故事背景中的每个人,实际情况如图:第一个人0秒开始上厕所,即18:10:18,6秒后结束。超时后,第二个人无缝上厕所;第二个人在6秒(0+6)上厕所,即18:10:24开始上厕所,2秒后结束,没有超时。第三个人等待2秒,按预定时间上厕所;第三个人在第10秒(6+2+2)次上厕所,即18:10:28开始上厕所,3秒后结束,没有超时,第四个人等2按计划上厕所的秒数;第四个人15秒(6+2+2+3+2)上厕所,即18:10:33开始上厕所,1秒后结束...cron表达式cron模式最强大定时任务中的触发策略,可以应对更多的情况。一个Cron表达式一共有7个元素,如下表所示:是否需要时间单位,取值范围通配符second是0-59的整数,-*/四个字符minute是整数0-59,-*/四位是0-23的整数,-*/四位日是1-31的整数(需要考虑具体的月份天数),-*?/LWC八个字符的月份是从1到12或JAN-DEC的整数,-*/四字符的星期是从1到7或SUN-SAT(1=SUN)的整数,-*?/lC#八字年号1970~2099,-*/四字
