Java获取CPU数量及线程池怎样设置最大线程数量公式
1、Java获取CPU核数代码:
System.out.println(Runtime.getRuntime().availableProcessors()); //输出本机CPU的数量,是一个数字
2、线程池设置最大线程数量公式:
(1)线程池大小 = CPU的数量 × 目标CPU的使用率 × (1+等待时间与计算时间的比)
(2)一般情况:
IO密集型应用,则线程池大小设置为 2N+1 (N为CPU数量,下同)
CPU密集型应用,则线程池大小设置为 N+1
IO密集型和 CPU密集型简单来说就是看服务器是注重CPU运算还是IO传输
3、在项目中一定要注意线程池的使用要严谨
不要使用Executors去直接调用API去创建线程池,要使用ThreadPoolExecutor(阿里内部也明确规定这一点)。原因是这样的处理方式能让我们更加明确线程池的运行规则,规避资源耗尽的风险。
Executors 返回线程池对象的弊端如下:
FixedThreadPool 和 SingleThreadExecutor : 允许请求的队列长度为Integer.MAX_VALUE,可能堆积大量的请求,从而导致OOM。
CachedThreadPool 和 ScheduledThreadPool : 允许创建的线程数量为Integer.MAX_VALUE ,可能会创建大量线程,从而导致OOM。
(1)七大参数
前面五个参数是必须的,后面两个参数(线程工厂和拒绝策略)是随意的,你可以自己合理选择,不选择就都是默认的。
ExecutorService service = new ThreadPoolExecutor(//1、核心线程 2、最大线程
5, 5, 0, TimeUnit.SECONDS,//3、空闲等待时间 4、等待时间单位
new ArrayBlockingQueue<>(5), Executors.defaultThreadFactory(),//5、等待队列 6、线程工厂
new ThreadPoolExecutor.AbortPolicy());//7、拒绝策略
2)四种拒绝策略:
3)四种阻塞队列:
1、SynchronousQueue ------- 直接提交队列(直接就提交,没有队列进行等待)
2、ArrayBlockingQueue -------有界任务队列(不能及时执行的任务,放到自定义的队列中等待执行)
3、LinkedBlockingDeque -----无界任务队列(等待队列的大小是无界,理论上大小取决于内存大小)
4、PriorityBlockingQueue ----优先任务队列(这是一种特殊的无界任务队列,可以按照优先级来执行任务)
线程池中的线程都是线程工厂创建的,记住,Java是不可以真正创建线程的,都是调用 C / C ++ 来在底层创建线程的。
你会发现 Eexcutors 框架底层全是利用 ThreadPoolExecutor 实现的。
有用点个关注,手留余香!
作者: 一个长不胖的程序YUAN
来源:CSDN
分类
已于2020-9-16 12:46:56修改
收藏
回复
删除帖子
回复
添加资源
相关推荐
-
C++的
线程
池
是什么,应该怎么实现
laokugonggao
• 1.1w浏览
• 0回复
-
Java
并发编程系列——
线程
池
lingyuli
• 6710浏览
• 0回复
-
【
Java
并发编程】
Java
多
线程
(一):
线程
基础
jordana
• 6855浏览
• 0回复
-
【
Java
并发编程】
Java
多
线程
(三):关于
线程
的几个问题
jordana
• 5143浏览
• 0回复
-
【
Java
知识点详解 7】
线程
池
huatechinfo
• 6374浏览
• 0回复
-
【知识总结】
Java
线程
池
footballboy
• 7625浏览
• 0回复
-
v21.07 鸿蒙内核源码分析(
线程
概念) | 是谁在不断的折腾
CPU
鸿蒙内核源码分析
• 6028浏览
• 0回复
-
如何手写一个
线程
池
?
hexiaox810
• 2007浏览
• 0回复
-
关于
Java
线程
池
构造参数,你该了解这些
万猫学社
• 2735浏览
• 0回复
-
给女朋友讲 :
Java
线程
池
的内部原理
万猫学社
• 1930浏览
• 0回复
-
万字解读
Java
线程
池
设计思想
及
源码实现
梦叶草789
• 1928浏览
• 0回复
-
#冲刺创作新星#
java
多
线程
——定时器、
线程
池
wx6319517567fea
• 2263浏览
• 0回复
-
并发编程之:深入解析
线程
池
ywz888
• 1974浏览
• 0回复
-
面试必备:
Java
线程
池
解析
我欲只争朝夕
• 2810浏览
• 0回复
-
我是一个
线程
池
danielmou
• 987浏览
• 0回复
-
OpenHarmony stage worker 多
线程
NL_AIDC_XJS
• 1.1w浏览
• 5回复
-
面试官:你是如何评估一个
线程
池
需要
设置
多少个
线程
WilliamGates
• 1396浏览
• 0回复
-
OpenHarmony使用
线程
池
TaskPool开发多
线程
任务
zhushangyuan_
• 1823浏览
• 4回复
-
KeyAffinityExecutor
线程
池
卡瓦格博之巅
• 272浏览
• 0回复