添加@Async注解,表示该定时任务是异步执行的,因为上面线程池配置了名字,所以可以看到打印的日志是该线程池中的线程在执行任务,如果没有配置线程池的话会默认使用SimpleAsyncTaskExecutor,这个异步执行器每次都会开启一个子线程执行,性能消耗比较大,所以最好是自己配置线程池 @Async@Scheduled(cron ="0/1 * * * * ?
1. 创建线程池: ScheduledExecutorService scheduExec = Executors.newScheduledThreadPool(10); 2. 系统启动读取配置文件加载需要执行的任务列表。 List tasks=XmlReader.getTasks(); for (int i=0;i 三 代码实现: 主要包括如下几个类和配置文件: 1. 启动类: Main类 package com.yanek.task; import java.util...
三、定时调度任务的问题描述按照以上方式配置,不管在哪个类中,只要采用 @Scheduled 注解来调度任务方法,所有的任务方法都默认使用同一个线程池中的同一个线程来进行任务调度。 所有采用 @Scheduled 注解的方法,可以交替执行(表面上),但是如果任何一个被调度的方法响应时间过长或者执行时间过长,将会导致所有被 @...