工作中有这样一个场景,需要处理千万级别的数据的一个算法,大部分是增删查的操作。这个时候就需要使用多线程去处理。
一开始是这么配置的:

@Configuration
@EnableAsync(proxyTargetClass = true)//利用@EnableAsync注解开启异步任务支持
@ComponentScan({"com.ctfojt.auditbcarslogo.service"}) //必须加此注解扫描包
public class ThreadPoolConfig implements AsyncConfigurer {@Overridepublic Executor getAsyncExecutor() {ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();taskExecutor.setCorePoolSize(10);//核心线程大小taskExecutor.setMaxPoolSize(20);//最大线程大小taskExecutor.setQueueCapacity(500);//队列最大容量//当提交的任务个数大于QueueCapacity,就需要设置该参数,但spring提供的都不太满足业务场景,可以自定义一个,也可以注意不要超过QueueCapacity即可taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());taskExecutor.setWaitForTasksToCompleteOnShutdown(true);taskExecutor.setAwaitTerminationSeconds(10);taskExecutor.setThreadNamePrefix("BCarLogo-Thread-");taskExecutor.initialize();return taskExecutor;}
}

这样配置效率很低,一天大概能处理30多万的数据。往后随着插入表的数据越来越多,处理速度也随之降低,跑个一两天之后,差不多能够处理10万多。完全满足不了需求。

后来网上查询线程池核心数配置,大部分都是这样的:

注:IO密集型(某大厂实践经验)核心线程数 = CPU核数 / (1-阻塞系数)
或着
CPU密集型:核心线程数 = CPU核数 + 1
IO密集型:核心线程数 = CPU核数 * 2

也尝试着这么配置,结果发现效率并不理想,提高不了多少。

这里是引用

什么是CPU密集型?什么是IO密集型?

最后,我是这么配置的,结果效率大大提升,仅用不到一天的数据,就跑完了千万级的数据。

//获取当前机器的核数
public static final int cpuNum = Runtime.getRuntime().availableProcessors();@Overridepublic Executor getAsyncExecutor() {ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();taskExecutor.setCorePoolSize(cpuNum);//核心线程大小taskExecutor.setMaxPoolSize(cpuNum * 2);//最大线程大小taskExecutor.setQueueCapacity(500);//队列最大容量//当提交的任务个数大于QueueCapacity,就需要设置该参数,但spring提供的都不太满足业务场景,可以自定义一个,也可以注意不要超过QueueCapacity即可taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());taskExecutor.setWaitForTasksToCompleteOnShutdown(true);taskExecutor.setAwaitTerminationSeconds(60);taskExecutor.setThreadNamePrefix("BCarLogo-Thread-");taskExecutor.initialize();return taskExecutor;}

完美的解决了问题,希望对大家有所帮助!!!

java线程池合理设置最大线程数和核心线程数相关推荐

  1. Java线程池七个参数详解:核心线程数、最大线程数、空闲线程存活时间、时间单位、工作队列、线程工厂、拒绝策略

    源码简介 ThreadPoolExecutor是JDK中的线程池实现,这个类实现了一个线程池需要的各个方法,它提供了任务提交.线程管理.监控等方法. 下面是ThreadPoolExecutor类的构造 ...

  2. java线程池大小_线程池大小设置多少合适?java如何合理设置线程池大小?

    在连接数据库时我们经常会用到线程池,而有时候我们就会烦恼,线程池的大小究竟该设置成多大才合适呢?小伙伴们知道要如何合理设置线程池大小吗?下面跟小编一起来看看吧. 一般来说,我们线程池究竟设置多大是基于 ...

  3. c++ socket线程池_从连接器组件看Tomcat的线程模型——NIO模式

    Tomcat8之后,针对Http协议默认使用org.apache.coyote.http11.Http11NioProtocol,也就是NIO模式.通过之前的博客分析,我们知道Connector组件在 ...

  4. matlab 设置最大并行数_浅析线程池参数设置

    背景 首先先明确一下线程池的主要作用是什么 线程池解决的核心问题就是资源管理问题.在并发环境下,系统不能够确定在任意时刻中,有多少任务需要执行,有多少资源需要投入.这种不确定性将带来以下若干问题: 频 ...

  5. 线程池大小设置,CPU的核心数、线程数的关系和区别,同步与堵塞完全是两码事

    线程池应该设置多少线程合适,怎么样估算出来.最近接触到一些相关资料,现作如下总结. 最开始接触线程池的时候,没有想到就仅仅是设置一个线程池的大小居然还有这么多的学问,汗颜啊. 首先,需要考虑到线程池所 ...

  6. java线程池队列大小_GitHub - sunshanpeng/dark_magic: 合理估算线程池大小及队列数

    合理估算java的线程池大小及队列数 原理分析 先来一个天真的估算方法:假设要求一个系统的TPS(Transaction Per Second或者Task Per Second)至少为20,然后假设每 ...

  7. 线程池大小设置和CPU核心数的关系

    文章目录 1.线程池和CPU核心数的关系 2.常见概念:CPU的核心数,CPU的线程数 3.是否使用线程池就一定比使用单线程高效呢? 1.线程池和CPU核心数的关系 一般说来,大家认为线程池的大小经验 ...

  8. java线程池参数_java线程池参数设置原则,如何设置线程池参数比较合理?

    线程池的参数应该怎样设置呢?相信对于很多的人来说这也是一个比较难的问题,下面就让我们一起来解决一下,究竟应该如何设置线程池的参数才是最合理的吧! 首先在设置参数的时候,有以下的几点是我们需要考虑到的! ...

  9. ThreadPoolExecutor使用和思考(上)-线程池大小设置与BlockingQueue的三种实现区别

    前记: jdk官方文档(javadoc)是学习的最好,最权威的参考. 文章分上中下.上篇中主要介绍ThreadPoolExecutor接受任务相关的两方面入参的意义和区别,池大小参数corePoolS ...

  10. tomcat 查看当前请求数_原生线程池这么强大,Tomcat 为何还需扩展线程池?

    前言 Tomcat/Jetty 是目前比较流行的 Web 容器,两者接受请求之后都会转交给线程池处理,这样可以有效提高处理的能力与并发度.JDK 提高完整线程池实现,但是 Tomcat/Jetty 都 ...

最新文章

  1. 【SeeMusic】视频编辑 ( 视频 X 坐标 | 视频 Y 坐标 | 视频旋转 | 视频扭曲 )
  2. NYOJ 595 乱七八糟
  3. Qt Linguist 开发人员 programmers
  4. Java5:BigInteger、BigDecimal详解
  5. 过山车99java游戏_过山车乐园游戏下载
  6. 【神经网络与深度学习】卷积神经网络在自然语言处理的应用
  7. 2014年武汉的IT行情好像不太好(续):20个月过后,再看当时面试过的几个公司--武汉财富基石-崩盘,辣妈萌宝-创业失败,朋友公司转交他人管理...
  8. 使用迅捷pdf虚拟打印机可以将excel转换成pdf文件吗?
  9. 急速微信开通过滤方法
  10. 加速度传感器灵敏度表示的几种方式LSB/g,count/g,V/g,V/°
  11. python前面三个大于号是啥_JavaScript 无符号位移运算符 三个大于号 的使用方法...
  12. maven手册(转)
  13. win10下OpenJtag驱动安装
  14. 毕业生最大感伤:穷!
  15. c语言五子棋存盘,C语言 五子棋(初学者版).doc
  16. 计算机二级是wpsoffice高级应用吗,考计算机二级ms office高级应用但是自己电脑上office软件都是wps 这和word ppt excel 软件有区别吗...
  17. 博客中的动态图片如何制作
  18. Java怎么做一个简单网页呢?
  19. 数字图像处理——第十章(图像分割)
  20. 美团王兴的创业三原则

热门文章

  1. The import java.io cannot be resolved (类库无法解析的问题解决 )
  2. 基础夯实:基础数据结构与算法(二)
  3. 请提前布局 Star Trek突破链游全新玩法,市场热度持续高涨
  4. 设计模式之动态代理模式
  5. 宋宝华- Linux namespace - Docker 背后的故事
  6. SFTP上传文件stalled Broken pipe
  7. protel 99se应用安装
  8. 注意那些每天给你发晚安的人
  9. day05_雷神_函数进阶
  10. Screenfly – 各种设备的屏幕和分辨率下快速测试网站