线程池配置
#实现线程池
public class ThreadPool extends ThreadPoolTaskExecutor {
private static final Logger logger = LoggerFactory.getLogger(DeviceThreadPool.class);
private void showThreadPoolInfo(String prefix){
ThreadPoolExecutor threadPoolExecutor = getThreadPoolExecutor();
if(null==threadPoolExecutor){
return;
}
logger.info("task: {}, "+this.getThreadNamePrefix());
logger.info("task: {}"+prefix);
logger.info("task: taskCount [{}]"+threadPoolExecutor.getTaskCount());
logger.info("task: completedTaskCount [{}], "+threadPoolExecutor.getCompletedTaskCount());
logger.info("task: activeCount [{}]"+threadPoolExecutor.getActiveCount());
logger.info("task: queueSize [{}]"+threadPoolExecutor.getQueue().size());
}
@Override
public void execute(Runnable task) {
showThreadPoolInfo("1. do execute");
super.execute(task);
}
@Override
public void execute(Runnable task, long startTimeout) {
showThreadPoolInfo("2. do execute");
super.execute(task, startTimeout);
}
@Override
public Future<?> submit(Runnable task) {
showThreadPoolInfo("1. do submit");
return super.submit(task);
}
@Override
public <T> Future<T> submit(Callable<T> task) {
showThreadPoolInfo("2. do submit");
return super.submit(task);
}
@Override
public ListenableFuture<?> submitListenable(Runnable task) {
showThreadPoolInfo("1. do submitListenable");
return super.submitListenable(task);
}
@Override
public <T> ListenableFuture<T> submitListenable(Callable<T> task) {
showThreadPoolInfo("2. do submitListenable");
return super.submitListenable(task);
}
}
#线程池配置
@Configuration
@EnableAsync
@Slf4j
public class ThreadPoolConfig {
@Bean
public Executor asyncServiceExecutor() {
ThreadPoolTaskExecutor executor = new DeviceThreadPool();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(5);
executor.setQueueCapacity(99999);
executor.setThreadNamePrefix("async-service-");
//当pool已满,不在新线程中执行,而是由调用者所在的线程执行
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executor.initialize();
log.info("task: asyncServiceExecutor init success");
return executor;
}
}