需求:服务优化改造,最初服务设计为单并发处理任务,防止任务过多导致被访问服务资源占用异常。后续优化部分类型任务执行为多并发处理,最大化利用资源。
任务处理流程:executerTask->taskMap.put(taskId,task)->schedule.scheduleAtFixedRate(execute)->getTask(WaitTask)->taskRun
任务触发-任务保存至内存Map(或者redis队列)-轮询服务每隔一段时间获取任务(本地内存Map根据任务状态获取任务,或redis队列获取任务)-获取到的任务和状态map匹配一致后触发执行,状态map获取对应任务为stop或remove则不做任何处理
初始版本任务处理ScheduleJob
package com.demo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.concurrent.BasicThreadFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@Service
@Slf4j
public class EvalScheduleJob {
private static Sc