123456789101112131415161718192021222324252627282930313233343536373839404142 |
- package com.fd.thread;
- import org.springframework.beans.factory.annotation.Value;
- 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;
- /**
- * Created by owen on 2017/8/29.
- */
- @Configuration
- @EnableAsync
- public class TaskExecutePool {
- @Value("${spring.task.pool.corePoolSize}")
- private int corePoolSize;
- @Value("${spring.task.pool.corePoolSize}")
- private int maxPoolSize;
- @Value("${spring.task.pool.keepAliveSeconds}")
- private int keepAliveSeconds;
- @Value("${spring.task.pool.queueCapacity}")
- private int queueCapacity;
- @Bean
- public Executor taskExecutor() {
- ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
- executor.setCorePoolSize(corePoolSize);
- executor.setMaxPoolSize(maxPoolSize);
- executor.setQueueCapacity(keepAliveSeconds);
- executor.setKeepAliveSeconds(queueCapacity);
- executor.setThreadNamePrefix("MyExecutor-");
- // rejection-policy:当pool已经达到max size的时候,如何处理新任务
- // CALLER_RUNS:不在新线程中执行任务,而是由调用者所在的线程来执行
- executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
- executor.initialize();
- return executor;
- }
- }
|