package com.xzx.log.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import java.util.concurrent.Executor; import java.util.concurrent.ThreadPoolExecutor; @Configuration @EnableAsync public class AsyncConfig { private final static int corePoolSize = 10; private final static int maxPoolSize = 200; private final static int queueCapacity = 10; private final static int keepAliveSeconds = 60; @Bean public Executor taskExecutor() { //核心线程corePoolSize、任务队列workQueue、最大线程 maximumPoolSize,如果三者都满了,使用handler处理被拒绝的任务。 ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(corePoolSize); executor.setMaxPoolSize(maxPoolSize); executor.setQueueCapacity(queueCapacity); executor.setKeepAliveSeconds(keepAliveSeconds); executor.setThreadNamePrefix("gc-log"); // 设置拒绝策略 /** * AbortPolicy 丢弃任务,抛运行时异常 CallerRunsPolicy 执行任务 P:当线程池满以后,队列达到最大值时,异步先会变为同步执行,影响主线程性能,请结合业务场景,具体分析使用(本人亲测) * DiscardPolicy 忽视,什么都不会发生 DiscardOldestPolicy 从队列中踢出最先进入队列(最后一个执行)的任务 */ executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy()); executor.initialize(); return executor; } }