首页 理论教育 Java服务端研发:多线程定时任务

Java服务端研发:多线程定时任务

时间:2023-11-22 理论教育 版权反馈
【摘要】:使用多线程的方式执行任务,可以避免任务间的相互干扰。下面介绍使用注解和线程池两种方式实现多线程定时任务。注解实现多线程在TimedTask类上添加注解@EnableAsync,在两个定时任务的方法上添加注解@Async。执行程序可以看到如下输出。

Java服务端研发:多线程定时任务

使用线程的方式执行任务,可以避免任务间的相互干扰。下面介绍使用注解和线程池两种方式实现多线程定时任务。

(1)注解实现多线程

在TimedTask类上添加注解@EnableAsync,在两个定时任务的方法上添加注解@Async。执行程序可以看到如下输出。

SimpleAsyncTaskExecutor-1 task2:Wed May 2315:34:50 CST 2018

SimpleAsyncTaskExecutor-2 task1:Wed May 2315:34:50 CST 2018

SimpleAsyncTaskExecutor-3 task2:Wed May 2315:34:55 CST 2018

SimpleAsyncTaskExecutor-4 task1:Wed May 2315:35:00 CST 2018

SimpleAsyncTaskExecutor-5 task2:Wed May 2315:35:00 CST 2018

SimpleAsyncTaskExecutor-6 task2:Wed May 2315:35:05 CST 2018

SimpleAsyncTaskExecutor-7 task2:Wed May 2315:35:10 CST 2018

SimpleAsyncTaskExecutor-8 task1:Wed May 2315:35:10 CST 2018

由输出可见,此种方式总是会新创建一个线程用于执行定时任务,并且在task1任务中,方法的耗时完全不影响任务的时间间隔。

(2)线程池实现多线程(www.xing528.com)

去掉在TimedTask类中添加的多线程注解,在工程中添加一个配置类ScheduledConfig,此类用来创建线程池,具体内容如下:

运行服务结果如下:

pool-1-thread-1 task2:Wed May 2316:04:05 CST 2018

pool-1-thread-2 task2:Wed May 2316:04:10 CST 2018

pool-1-thread-2 task1:Wed May 2316:04:10 CST 2018

pool-1-thread-1 task2:Wed May 2316:04:15 CST 2018

pool-1-thread-2 task2:Wed May 2316:04:20 CST 2018

pool-1-thread-2 task2:Wed May 2316:04:25 CST 2018

pool-1-thread-3 task1:Wed May 2316:04:30 CST 2018

pool-1-thread-1 task2:Wed May 2316:04:30 CST 2018

pool-1-thread-1 task2:Wed May 2316:04:35 CST 2018

由输出可见,task2的执行没有受到task1耗时的影响,task1本身的计时受到了自己运行时间的影响。

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

我要反馈