代码仓库:gitee

线程池创建

`

@Configuration

@EnableAsync

public class TaskPoolConfig {

@Bean("syncExecutorPool")
public Executor taskExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
// 核心池大小
taskExecutor.setCorePoolSize(5);
// 最大线程数
taskExecutor.setMaxPoolSize(10);
// 队列程度
taskExecutor.setQueueCapacity(100);
// 线程空闲时间
taskExecutor.setKeepAliveSeconds(60);
// 线程前缀名称
taskExecutor.setThreadNamePrefix("syncExecutor--");
// 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean,
// 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。
taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
// 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。
taskExecutor.setAwaitTerminationSeconds(60);
// 线程不够用时由调用的线程处理该任务
taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
return taskExecutor;
}

}`

线程池参数

核心线程数量:CorePoolSize

看业务场景设置(我通常设置为CPU核心*1)

最大线程数量:MaxPoolSize

当核心线程数量都在使用状态时,会调用最大线程数量里的线程,使用的总线程不会超过最大线程数量,其余则等待(我通常设置为CPU核心*2)

队列程度:QueueCapacity

线程队列的大小

线程空闲时间:KeepAliveSeconds

线程前缀名称:ThreadNamePrefix

停机策略:WaitForTasksToCompleteOnShutdown

该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean,这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。

任务的等待时间:AwaitTerminationSeconds

任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住

拒接策略:RejectedExecutionHandler

线程不够用时由调用的线程处理该任务

线程池测试1(核心线程数量)



结果:线程池的核心线程数量轮训执行

线程池测试2(当核心线程数量和最大线程数量不够时)

随机睡眠0-10000毫秒

new Random().nextInt(10000)

结果:

当5个核心线程数量不够用时,使用最大线程数量里的线程

当最大线程数量不够用时,使用主线程执行该任务

// 线程不够用时由调用的线程处理该任务

taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());

最新文章

  1. Lind.DDD.LindMQ~关于持久化到Redis的消息格式
  2. webpack使用的心得
  3. MVC数据传递
  4. 最简单的pagging插件
  5. (史上最全的ios源码汇总)
  6. Android开发指南--0 总览
  7. php hook编程机制
  8. UIDatePicker封装
  9. 解析XML技术
  10. mysql中如何开启binlog?开启二进制日志文件?binary log?
  11. U3D的控制
  12. UVa 11248 Frequency Hopping (网络流)
  13. Entity Framework取消修改
  14. linux下mysql安装报错及修改密码登录等等
  15. 敏捷方法之极限编程(XP)和 Scrum区别
  16. Ext自定义控件 - 自学ExtJS
  17. nodejs笔记--Events篇(二)
  18. idea 添加多模块项目
  19. 27 个Jupyter Notebook的小提示与技巧
  20. js 数据获取

热门文章

  1. NOIOL #2 爆零记
  2. 关于 KB/KiB、MB/MiB
  3. 使用FastqCount统计fastq文件基本信息?
  4. 详细解析Thinkphp5.1源码执行入口文件index.php运行过程
  5. (转载)SQL Server 2008 连接JDBC详细图文教程
  6. A Child's History of England.36
  7. python web工程师跳巢攻略
  8. Learning Spark中文版--第五章--加载保存数据(1)
  9. Swift alert 倒计时
  10. android 下动态获取控件的id