使用多线程的方式执行任务,可以避免任务间的相互干扰。下面介绍使用注解和线程池两种方式实现多线程定时任务。
(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本身的计时受到了自己运行时间的影响。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。