@Configuration @ConditionalOnProperty(value = "guigu.async.enable", havingValue = "true") @EnableAsync public class AsyncConfig { private static final Logger log = LoggerFactory.getLogger(AsyncConfig.class); @Value("${guigu.async.core-pool-size:5}") private int corePoolSize; @Value("${guigu.async.queue-capacity:10}") private int queueCapacity; @Value("${guiugu.async.max-pool-size:25}") private int maxPoolSize; @Value("${guigu.async.keepalive-seconds:10}") private int threadTimeout; @Primary @Bean public AsyncTaskExecutor myAsyncExecutor() { log.info(">> 初始化spring异步任务线程池 - myAsyncExecutor: coore={},max={},queue={}", corePoolSize, maxPoolSize, queueCapacity); ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor(); // 当一个任务通过execute(Runnable)方法欲添加到线程池时: // - 若线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也创建新的线程来处理被添加的任务。 // - 若线程池中的数量等于corePoolSize,但缓冲队列workQueue未满,则任务被放入缓冲队列。 // - 若线程池中的数量大于corePoolSize,缓冲队列workQueue满,且线程池中的数量小于maximumPoolSize,则创建新线程来处理被添加的任务。 // - 若线程池中的数量大于corePoolSize,缓冲队列workQueue满,且线程池中的数量等于maximumPoolSize,则通过handler所指定的策略来处理此任务。 // 即:处理任务的优先级为:核心线程corePoolSize、任务队列workQueue、最大线程 maximumPoolSize,若三者都满,则使用handler处理被拒绝的任务。 // - 若线程池中的线程数量大于corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被终止。 // 线程池维护线程的最少数量 threadPoolTaskExecutor.setCorePoolSize(corePoolSize); // 线程池维护线程的最大数量 threadPoolTaskExecutor.setMaxPoolSize(maxPoolSize); // 线程池所使用的缓冲队列 threadPoolTaskExecutor.setQueueCapacity(queueCapacity); // 线程池维护线程所允许的空闲时间 threadPoolTaskExecutor.setKeepAliveSeconds(threadTimeout); // don't forget to initialize the thread pool threadPoolTaskExecutor.initialize(); return threadPoolTaskExecutor; } @Bean public AsyncUncaughtExceptionHandler myAsyncUncaughtExceptionHandler() { return (throwable, method, params) -> { String methodName = method.getDeclaringClass().getName() + method.getName(); log.error(">> 异步执行错误: {}({})", methodName, params, throwable); }; } }
使用异步注解
@Async @Scheduled(cron = "* * * * * ?") public void hello() throws InterruptedException { log.info("hello..."); Thread.sleep(3000); }
标签:异步,corePoolSize,配置,private,池中,线程,async,threadPoolTaskExecutor From: https://www.cnblogs.com/jiutang001/p/16767230.html