Java线程池的参数设置

成功没有捷径 2020-11-09 22:18:16
java 设置 线程 参数 参数设置


最近面试过一些候选人,面试过程中,我比较倾向于问一些偏基础又较为开放的问题,用来看看候选人基础能力怎么样,比如线程池,提问过程一般类似如下:

我先问候选人平时怎么使用线程池,得到的结果不出意外就是两种:1.我不用线程池,工作中没接触过并发;2.用Executors.newCachedThreadPool;

不管是哪一种回答,我还是希望能从候选人那里得到他们对线程池的理解,因此还是会问一下ThreadPoolExecutorService的几个参数相关的问题,除了基础非常差的候选人外,一般候选人都能回答上corePoolSize, maxPoolSize, BlockingQueue之间的关系:

  • corePoolSize是核心线程数,maxPoolSize是最大线程数,BlockingQueue是任务队列
  • 当有任务提交时,先创建corePoolSize数量的线程,有更多的任务则进入到BlockingQueue,BlockingQueue满了还不够则创建线程数直到macPoolSize
  • 线程空闲一段时间后会被销毁直到线程池中只剩下core数量的线程

回答出这几个参数的作用以及他们之间的关系后,我一般会给一到两个线程池相关的题,看看候选人是否能思考出,比如:

  • 假如提交到线程池中的任务,IO耗时占比是90%,计算耗时占比10%,忽略提交到线程池中的任务数量,在4C8G的机器上,理想情况下线程池中创建多少个线程是最优的

一般平时只埋头写CURD的候选人,难以计算出来,当然也遇到了不少能算出来结果来的,线程数=(1/0.1) * 4 = 40,能算出来的候选人,我会问下其它问题,例如:

  • 假如e有一类cpu密集性的任务,没有IO操作,日常的时候只有1个任务,流量高峰会有50个任务,4C8G的机器上,使用的线程池,如何设置corePoolSize, maxPoolSize以及BlockingQueue的大小

这样的问题,我还没有遇到能回答的候选人,一般得到类似于下的回答:

  • corePoolSize=4个线程,maxPoolSize大点100个,队列大点,1万
  • 2个线程,队列大点1千

因此我会对候选人做一些引导,比如回答core=4, max=50, queue=1w的,我会问他他设置的maxPoolSize有没有作用,明显队列设置成1w,这个队列太大,根本就不会满,maxPoolSize数量的线程永远不会被创建,明显候选人是随意设置的,没有经过思考,这个时间我会让他结合前面一个题再思考思考

这一步后,有些等候人开始回答出用4个线程,队列50,但这样并不是最优的,因为日常每秒1个任务时,只需要一个线程就够了,创建出4个线程,就有3个浪费

很显然,日常只需要一个线程,那么corePoolSize=1,而高峰时候,虽然任务有50个,但是只是4C的机器,对于cpu密集型任务,4个线程是最优的,因此理想情况下maxCorePoolSize=4,最后再看看队列,因为队列满了,max才会被创建,而我们需要让max快速被创建出来,又不会出现任务拒绝,因此,可将队列大小设置成46,那么线程池的行为如下:

  • 提交第一个任务,创建出core,1个线程
  • 提交第二个到第47个任务时,这些任务进入到队列中,此时队列已满
  • 提交第48个任务到第50个任务时,创建出max,此时一共有4个线程
  • 4个线程同时将队列里的46个任务消费完
  • 一段时间后,max - core数量的线程销毁,即销毁3个线程,还剩下一个线程
版权声明
本文为[成功没有捷径]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/aiseek/p/13950818.html

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云