Callable项目实战应用
package com.carnation.config;
import org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncAnnotationBeanPostProcessor;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.*;
/**
-
线程池配置管理
-
@author chj 2021/01/22
*/
@Configuration
public class ThreadPoolConfig {// 取得本地机器cpu数量
public final static int THREAD_COUNT = Runtime.getRuntime().availableProcessors();/**
- IO密集型任务
- 自定义线程池,参数有待调整 (此操作会使默认线程池不初始化 也可使用springboot默认 但参数配置需要修改 添加在yml中即可)
- springboot Executor 自动装配{@link TaskExecutionAutoConfiguration}
- 设置核心线程数:
- CPU密集型:故而大小设置为CPU核心数+1,防止CPU页缺失
- IO高密集型:任务多为数据库等待执行耗时长,可以适当增加线程数量,例如:CPU*2-1
- @return
/
@Bean(name = {TaskExecutionAutoConfiguration.APPLICATION_TASK_EXECUTOR_BEAN_NAME,
AsyncAnnotationBeanPostProcessor.DEFAULT_TASK_EXECUTOR_BEAN_NAME})
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(THREAD_COUNT3-1);
executor.setMaxPoolSize(THREAD_COUNT*4);
executor.setQueueCapacity(1000);
executor.setKeepAliveSeconds(300);
executor.setThreadNamePrefix(“taskExecutor-”);
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
return executor;
}
/**
-
CPU密集型 任务
-
@return
*/
@Bean(“mibIoThreadPoolTask”)
public Executor mibIoThreadPoolTask() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(THREAD_COUNT+1);
// 设置最大线程数
executor.setMaxPoolSize(THREAD_COUNT*2);
// 设置队列容量
executor.setQueueCapacity(200);
// 设置线程活跃时间(