Scheduled多任务的冲突解决
/**
* @author gaoshanshan
*
* @Scheduled多任务的冲突解决
* @date 2022/1/7
*/
@Configuration
@EnableAsync
public class TaskScheduleConfig {
private static final int corePoolSize = 10; // 默认线程数
private static final int maxPoolSize = 100; // 最大线程数
private static final int keepAliveTime = 10; // 允许线程空闲时间(单位:默认为秒),十秒后就把线程关闭
private static final int queueCapacity = 200; // 缓冲队列数
private static final String threadNamePrefix = "it`s-threadDemo-"; // 线程池名前缀
@Bean("threadPoolTaskExecutor")
public ThreadPoolTaskExecutor getDemoThread(){
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(corePoolSize);
executor.setMaxPoolSize(maxPoolSize);
executor.setQueueCapacity(keepAliveTime);
executor.setKeepAliveSeconds(queueCapacity);
executor.setThreadNamePrefix(threadNamePrefix);
//线程池拒绝任务的处理策略
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
//初始化
executor.initialize();
return executor;
}
}
定时任务写法
/**
* @author gaoshanshan
* @date 2022/1/7
*/
@Component
public class SchedulerTaskController {
private Logger logger= LoggerFactory.getLogger(SchedulerTaskController.class);
private static final SimpleDateFormat dateFormat=new SimpleDateFormat("HH:mm:ss");
private int count=0;
@Scheduled(cron="0/1 * * * * ?")
@Async("threadPoolTaskExecutor")
public void process(){
logger.info("英文:this is scheduler task runing "+(count++));
}
@Scheduled(fixedRate = 6000)
@Async("threadPoolTaskExecutor")
public void currentTime(){
logger.info("中文:现在时间"+dateFormat.format(new Date()));
}
@Scheduled(fixedRate = 1000)
@Async("threadPoolTaskExecutor")
public void currentTime2(){
logger.info("中文--------:现在时间"+dateFormat.format(new Date()));
}
@Scheduled(fixedDelay = 1000)
@Async("threadPoolTaskExecutor")
public void currentTime3(){
logger.info("中文>>>>>>>>:现在时间"+dateFormat.format(new Date()));
}
}