怎么设置线程池的核心线程数大小

发布时间:2023年12月20日

程序员的公众号:源1024获取更多资料,无加密无套路!

最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》,《Java并发编程实战》等等
获取方式: 关注公众号并回复 电子书 领取,更多内容持续奉上


线程池的核心线程数(corePoolSize),当 allowCoreThreadTimeOut 为 false 时, 核心线程会一直存活, 哪怕是一直空闲着 。而当 allowCoreThreadTimeOut 为 true时核心线程空闲时间超过 keepAliveTime 时会被回收。

核心线程数大小,需要分析线程池执行的任务的特性:CPU 密集型还是 IO 密集型

  • CPU密集型任务

主要是执行计算任务, 响应时间很快, cpu 一直在运行, 这 种任务 CPU 的利用率很高, 那么线程数的配置应该根据 CPU 核心数来决定,?尽量使用较小的线程池,一般为CPU核心数+1。因为CPU密集型任务使得CPU使用率很高,若开过多的线程数,会造成CPU过度切换。

  • IO密集型任务

像 MySQL 数据库、文件的读写等任务,主要是进行 IO 操作, 执行 IO 操作的时间较长, CPU处于空闲状态, 导致?CPU的利用率不高, 这种情况下可以增加线程池的大小,结合线程的等待时长来判断, 等待时间越长, 那么线程数也相对越多 。一般可以设置为?2*CPU核心数?。可以让CPU在等待IO的时候有其他线程去处理别的任务,充分利用CPU时间。

总结

线程的平均工作时间所占比例越高,就需要越少的线程。

线程的平均等待时间所占比例越高,就需要越多的线程。


?系列文章索引

MyBatis的插件能在哪些地方进行拦截?

了解MyBatis的缓存机制吗

面试官:谈谈对volatile的理解

Spring中用到了哪些设计模式

面试官:说一下SQL的执行过程

线程池的工作原理


?

文章来源:https://blog.csdn.net/feikillyou/article/details/135094928
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。