在定时任务中为了加快处理速度,一般都会使用多线程处理业务。需要注意一下事项:
1. 定时任务是否允许上一个定时任务未结束,下一个定时任务可以启动,通过Scheduled中的配置在决定。
2. 主线程已经关闭,线程池中的线程还在运行问题。线程池的关闭方法问题
3. 定时任务有大量数据,导致服务无法停止问题。
4. 如何获取线程的处理结果
如下代码是示例,stop状态的使用和线程池shutdown的处理逻辑需要依据自己的业务来处理。
@PreDestroy
public void destory(){
stop = true;
}
//线程停止状态, 通过注解检测到服务器停止时修改stop状态
boolean stop = false;
//服务器启动后延迟1分钟执行,定时任务结束后延迟1分钟执行下一次
@Scheduled(initialDelay = 60*1000L, fixedDelay = 60*1000L)
public void scheduling(){
List dataList = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
dataList.add("data_"+i);
}
int threadSize = 10;
ExecutorService esPool = Executors.newFixedThreadPool(threadSize);