首页 理论教育 Java服务端研发知识图谱-单线程定时任务

Java服务端研发知识图谱-单线程定时任务

时间:2023-11-22 理论教育 版权反馈
【摘要】:由输出可见,task1方法每隔10s打印一次线程和时间信息,@Scheduled注解标明此方法是一个定时任务,cron属性指定了定时任务执行的时间周期。单线程多任务的相互影响修改task1方法,在方法中添加一个sleep方法,模拟任务执行耗时,观察对两个定时任务的影响。

Java服务端研发知识图谱-单线程定时任务

根据之前章节的讲解,创建一个Spring Boot工程,命名为ElasticJobExample,接下来几节将在此工程中分别演示@Scheduled形式的定时任务和ElasticJob形式的分布式任务。

(1)单个任务

在工程中添加类TimedTask,在此类中实现如下内容:

运行服务结果如下:

pool-3-thread-1 task1:Wed May 2314:41:40 CST 2018

pool-3-thread-1 task1:Wed May 2314:41:50 CST 2018

pool-3-thread-1 task1:Wed May 2314:42:00 CST 2018

由输出可见,task1方法每隔10s打印一次线程和时间信息,@Scheduled注解标明此方法是一个定时任务,cron属性指定了定时任务执行的时间周期。cron属性不仅能够指定时间间隔,还能指定具体时间。cron的用法会在后面介绍。

(2)多个任务

在TimedTask类中,还可以定义一个由@Scheduled注解标注的方法,这样在此类中就有两个定时任务,例如在类中添加如下方法,指定每5s执行一次任务。

运行服务结果如下:

pool-3-thread-1 task2:Wed May 2314:47:55 CST 2018

pool-3-thread-1 task2:Wed May 2314:48:00 CST 2018

pool-3-thread-1 task1:Wed May 2314:48:00 CST 2018(www.xing528.com)

pool-3-thread-1 task2:Wed May 2314:48:05 CST 2018

pool-3-thread-1 task2:Wed May 2314:48:10 CST 2018

pool-3-thread-1 task1:Wed May 2314:48:10 CST 2018

由输出可见,task2每隔5s执行一次任务,task1每隔10s执行一次任务,但是你会发现这两个任务使用的是同一个线程,那么某一任务如果执行时间过长,会对另一任务造成什么影响呢?

(3)单线程多任务的相互影响

修改task1方法,在方法中添加一个sleep方法,模拟任务执行耗时,观察对两个定时任务的影响。

运行服务结果如下:

pool-3-thread-1 task1:Wed May 2315:01:20 CST 2018

pool-3-thread-1 task2:Wed May 2315:01:30 CST 2018

pool-3-thread-1 task2:Wed May 2315:01:35 CST 2018

pool-3-thread-1 task1:Wed May 2315:01:40 CST 2018

pool-3-thread-1 task2:Wed May 2315:01:50 CST 2018

pool-3-thread-1 task2:Wed May 2315:01:55 CST 2018

由输出可见,此种情况,由于task1执行耗时过长,会导致task2需要等待task1执行完之后,才能开始计时和执行任务,可见两个定时任务在单线程的情况下是相互阻塞的。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈