package com.xx.xx.config;

import java.util.concurrent.ThreadPoolExecutor;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; /**
* 线程池配置
*
* @author jiangkd
* @date 2022/7/14 14:30
*/
@Configuration
public class ThreadPoolTaskExecutorConfig { final private Logger log = LoggerFactory.getLogger(this.getClass()); /**
* 线程池, ThreadPoolTaskExecutor
* <p>
* ThreadPoolTaskExecutor实质是对ThreadPoolExecutor的封装
* 线程池说明以及参数参考: https://www.cnblogs.com/no-celery/p/16355344.html
*
* @return ThreadPoolTaskExecutor
*/
@Bean
public ThreadPoolTaskExecutor threadPoolTaskExecutor() {
//
final ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
// 最佳线程数目 =((线程等待时间+线程CPU时间)/线程CPU时间 )*CPU数目
// 核心线程池大小
threadPoolTaskExecutor.setCorePoolSize(8);
// 最大线程数
threadPoolTaskExecutor.setMaxPoolSize(16);
// 线程池维护线程(不包括核心线程)所允许的空闲时间, 秒
threadPoolTaskExecutor.setKeepAliveSeconds(100);
// 队列最大长度
threadPoolTaskExecutor.setQueueCapacity(30);
// 线程池关闭的时候等待所有任务都完成后, 再继续销毁其他的Bean
threadPoolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true);
// 线程池中任务销毁的等待时间, 如果超过这个时间还没有销毁就强制销毁, 以确保应用最后能够被关闭, 而不是阻塞住
threadPoolTaskExecutor.setAwaitTerminationSeconds(60);
// 如果为true, 核心线程空闲时间到达setKeepAliveSeconds秒后会被销毁
threadPoolTaskExecutor.setAllowCoreThreadTimeOut(false);
// 线程前缀名称, 方便定位处理任务所在的线程池
threadPoolTaskExecutor.setThreadNamePrefix("ct-logic-task-");
/*
拒绝策略
采用默认策略, 线程池和队列都满了的时候, 丢弃任务 && 直接抛出java.util.concurrent.RejectedExecutionException异常
*/
threadPoolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy()); // 初始化线程池
threadPoolTaskExecutor.initialize();
log.info("自定义线程池, ThreadPoolTaskExecutor线程池初始化 ... SUCCESS"); return threadPoolTaskExecutor;
}
}

最新文章

  1. java常用设计模式
  2. 理解模板引擎Razor 的原理
  3. FFmpeg-20160415-snapshot-bin
  4. HTML5[7]: 实现网页版的加载更多
  5. Axis2、Axis1 以及其他接口的调用方式
  6. USB鼠标按键驱动
  7. C++函数中那些不可以被声明为虚函数的函数
  8. Sentinel-1雷达数据可以免费下载
  9. BUAA 2014级数据结构第五次上机 二叉树之数组转换广义表
  10. unity插件开发——Selection
  11. 201521123073《Java程序设计》第3周学习总结
  12. 我的第一个python web开发框架(27)——定制ORM(三)
  13. java问题
  14. Vue1.0到2.0变化
  15. Alpha(6/10)
  16. java poi excel操作 下拉菜单 及数据有效性
  17. (转)解决OSX上面PHP curl SSLRead()
  18. psssss test
  19. 2018 USP Try-outsF - Optimizing Transportation in Portugal
  20. Spring框架简介

热门文章

  1. 常用得cron表达式
  2. Spyder无法使用搜狗输入中文的解决办法
  3. Micro-OA系统
  4. 原始的jdbc
  5. Linux-samba共享
  6. Delphi as 和 is 的使用
  7. 《这里分别闭合离合器Zm和Z2会分别有什么效果》 回复
  8. yolov5的训练中断恢复
  9. 如何为 Debian 11 安装图形用户界面 (GUI)
  10. Arch安装记录(BIOS+GPT)