import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
@Configuration
public class ThreadPoolConfig {
private static final int CORE_POOL_SIZE = 10;
private static final int MAX_POOL_SIZE = 50;
private static final int QUEUE_CAPACITY = 99999;
private static final int KEEP_ALIVE_SECONDS = 60;
private static final String THREAD_NAME_PREFIX = "zetar-public-thread-";
@Bean(name = "threadPoolTaskExecutor")
public Executor threadPoolTaskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
// 配置核心线程数
executor.setCorePoolSize(CORE_POOL_SIZE);
// 配置最大线程数
executor.setMaxPoolSize(MAX_POOL_SIZE);
// 配置队列大小
executor.setQueueCapacity(QUEUE_CAPACITY);
// 线程池维护线程所允许的空闲时间
executor.setKeepAliveSeconds(KEEP_ALIVE_SECONDS);
// 配置线程池中的线程的名称前缀
executor.setThreadNamePrefix(THREAD_NAME_PREFIX);
// 线程池对拒绝任务(无线程可用)的处理策略
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
// 执行初始化
executor.initialize();
return executor;
}
}
这种submit提交的任务,执行时出现异常,不会直接抛出。调用future.get()的时候才会抛出。如果需要执行时抛出异常,可以改为用execute()。