Java线程池如何合理配置线程数

从STM32转战STC32G?逐飞开源库帮你快速上手GPIO、PWM与ADC(避坑指南) 本文详细介绍了从STM32迁移到STC32G32K128的开发实践,重点解析了GPIO、PWM和ADC等基础外设的设计差异,并提供了基于逐飞开源库的高效应用方案。通过对比两种平台的开发工具和操作方式,帮助开发者快速上手STC32G,避免常见陷阱,提升开发效率。 阅读详情

Java线程池如何合理配置线程数

根据任务类型是CPU 密集型任务还是 IO 密集型任务进行划分:
  • 对于 CPU 密集型的计算场景:

理论上线程的数量 = CPU 核数就是最合适的,不过通常把线程的数量设置为CPU 核数 +1,会实现最优的利用率。

  • 对于 IO 密集型的计算场景:

计算方式根据《Java虚拟机并发编程》中提出的:线程数 = CPU 核心数 / (1 - 阻塞系数)
其中计算密集型阻塞系数为 0,IO 密集型阻塞系数接近 1,一般认为在 0.8 ~ 0.9 之间。比如 8 核 CPU,按照公式就是 2 / ( 1 - 0.9 ) = 20 个线程数(简单粗暴的计算就是核心线程数的两倍)

**总结:**核心线程数的设置和CPU核心数、任务的执行情况(不确定,需要测试)

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

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

  • 针对不同的程序,进行对应的实际测试就可以得到最合适 的选择。

  + import java.util.Iterator;
    import java.util.concurrent.LinkedBlockingDeque;
    import java.util.concurrent.ThreadPoolExecutor;
    import java.util.concurrent.TimeUnit;
  
  /**
  
   * Description 
     *
   * @Author blindore
   * @Date Created in 2020-12-18 15:13
   * @Version 2.10.6
     */
     public class ThteadPoolDemo {
     public static void main(String[] args) {
         ThreadPoolExecutor executor = new ThreadPoolExecutor(4, 8, 0, TimeUnit.MICROSECONDS, new LinkedBlockingDeque<Runnable>(100),
                 new ThreadPoolExecutor.AbortPolicy());
         for (int i = 1; i <= 100; i++) {
             System.out.println("添加第" + i + "个任务");
             int finalI = i;
             executor.execute(new Thread(() -> {
                 System.out.println(Thread.currentThread().getName() + "执行:任务" + finalI + "  run");
             },"任务"+i ));
             Iterator iterator = executor.getQueue().iterator();
             while (iterator.hasNext()){
                 System.out.println("列表:"+iterator.next());
             }
         }
     }
     }
别再手动写JSON了!用Node-RED OPC UA节点5分钟搞定楼宇温湿度数据采集 本文介绍了如何利用Node-RED和OPC UA节点快速实现楼宇温湿度数据的自动化采集与JSON格式转换。通过可视化工具Node-RED,开发者无需编写复杂代码,5分钟内即可完成从传感器到数据输出的全流程配置,大幅提升智慧楼宇和工业物联网项目的实施效率。 阅读详情

相关推荐

152:vue+leaflet 判断一个点是否在一个电子围栏内

本文介绍了一个基于Vue+Leaflet的示例,演示如何判断点是否在电子围栏内。作者大剑师兰特(CSDN知名博主)展示了使用polygon.getBounds().contains(latlng)方法检测点与多边形边界的关系。代码仅需80行,通过点击地图触发判断逻辑,结果显示提示信息。该技术可广泛应用于地理围栏、位置服务等场景,需要安装turf依赖。文章提供了完整源码和配置说明,适合GIS开发者学习参考。

大剑师兰特的GIS世界 728

Java应用】设置线程池最佳的线程数

线程池设置最优线程数

dylan的博客 2022

推荐系统[九]项目技术细节讲解z2:搜索Query理解[Term Weight、Query 改写、同义词扩写]和语义召回技术

在 pooling 方法上,我们也尝试过不同层 pooling,或者在多层上增加 attention 聚合 BERT 多层结果,效果和最后一层所有 token 做 average pooling 相当。损失函数方面,在排序阶段使用pairwise比 pointwise 损失函数的效果会更好。

丨汀、的博客 1081

线程池最优线程数计算公式

这个公式是用来估算最佳线程数的一种方法,通常被称为"线程数计算公式"或"最优线程数计算公式"。让我们来解析一下这个公式:线程数 = CPU核数 * CPU利用率 * (1 + 等待时间/计算时间)CPU核数:物理CPU核心的数量CPU利用率:通常在0.8-0.9之间,表示CPU的期望利用率等待时间(W):线程等待时间,如I/O操作时间计算时间(C):线程实际运行计算的时间这个公式考虑了以下因素:CPU核数:更多的核心可以支持更多的并发线程。

坚定目标,超越自我 2069

java线程池大小_线程池大小设置多少合适

所负责的服务开了多少个线程?这些线程都是如何管理?开的线程数合理吗?如果合理,为什么合理?如果不合理,为什么不合理?

深圳克林斯曼 4715

Java线程:创建多少线程才是合适的?

Java多线程实战,创建多少线程才是合适的?

ChinaLiaoTian的博客 4727

Java线程池核心线程数设置

Java线程池核心线程数设置

qq_41139119的博客 2329

Java线程池如何合理配置核心线程数?

配置核心线程数 Java线程池如何合理配置核心线程数?分下面两个步骤分析: 第一步:先看下机器的CPU核数,然后再设定具体参数 CPU核数=Runtime.getRuntime().availableProcessors() System.out.println(Runtime.getRuntime().availableProcessors()); 第二步:分析下线程池处理的程序是CPU密集型,还是IO密集型 CPU 密集型:核心线程数 = CPU核数 + 1 IO 密集型:核心线程数 = CPU核数

玲珑骰子安红豆,入骨相思知不知 3853

聊聊java线程池的七大参数,四种拒绝策略,工作原理以及合理配置线程数

面试大厂,都会涉及到的一个题目,java线程池的工作原理以及参数,今天我们就来聊聊这个问题, 在创建了线程池后,当有请求任务来之后,就会安排池中的线程去执行请求任务,近似理解为今日当值线程,当线程池中的线程数目达到corePoolSize后,就会把到达的任务放到缓存队列当中 ...

dy051107的博客 995

java线程池如何合理配置核心线程数

线程池合理的线程数你是如何考虑的?这也是之前面试遇到的一个题: 1.先看下机器的CPU核数,然后在设定具体参数: System.out.println(Runtime.getRuntime().availableProcessors()); 即CPU核数 =Runtime.getRuntime().availableProcessors() 2.分析下线程池处理的程序是CPU密集型,还是...

weixin_44777693的博客 2万+

Java线程池如何合理配置核心线程数

线程数的设置的最主要的目的是为了充分并合理地使用 CPU 和内存等资源,从而最大限度地提高程序的性能,因此让我们一起去探索吧! 首先要考虑到 CPU 核心数,那么在 Java 中如何获取核心线程数? 可以使用 Runtime.getRuntime().availableProcessor() 方法来获取(可能不准确,作为参考) 在确认了核心数后,再去判断是 CPU 密集型任务还是 IO 密集型任务: CPU 密集型任务: 比如像加解密,压缩、计算等一系列需要大量耗费 CPU 资源的任务,大部分场景下都是纯

pengli 1996

java线程池如何合理配置核心线程数

java线程池如何合理配置核心线程数

qq_41451744的博客 2702

Java多线程线程池的参数和配置

Java多线程编程中,线程池是一种常见的技术,用于管理线程的创建和销毁。线程池中的线程可以被重复利用,从而减少了线程的创建和销毁的开销,提高了程序的性能。在Java中,线程池的参数和配置非常重要,不同的参数和配置会影响线程池的性能和行为。

MRZHQ的博客 4829

Java线程池参数如何配置

这些倍数的建议值是基于一些经验法则和性能优化的最佳实践得出的。它们不是绝对的,而是根据多年的实践经验总结出的比较适合大多数系统的一些配置建议。关于配置线程池的核心线程数、最大线程数和队列容量,我们需要考虑系统的硬件配置、任务的特性和系统的负载情况。通过这样的配置,能够让系统在高负载情况下依然能高效运行,并且能够处理各种类型的任务。

m0_37751431的博客 2592

Java线程池的核心线程数、最大线程数有什么设置方案

设置线程池的核心线程数(corePoolSize)和最大线程数(maximumPoolSize)是根据应用程序的特性和需求来确定的。总之,设置线程池的核心线程数和最大线程数需要综合考虑应用程序的特性、系统资源限制以及任务类型等因素,以保证线程池的稳定性、高效性和可扩展性。

qq_22193961的博客 3372

Java线程池七大参数详解和配置(面试重点!!!)

Java-如何合理的设置线程池大小想要合理配置线程池线程数的大小,需要分析任务的类型,任务类型不同,线程池大小配置也不同。配置线程池的大小可根据以下几个维度进行分析来配置合理的线程数:任务性质可分为:CPU密集型任务IO密集型任务混合型任务。任务的执行时长。任务是否有依赖——依赖其他系统资源,如数据库连接等。CPU密集型任务(普通计算)尽量使用较小的线程池,一般为CPU核心数+1。

可乐要加冰!!! 1万+

面试必问:线程池的最佳核心线程如何确定

看到这里的小伙伴,相信对于如何确定线程池的最佳线程数(核心线程数、最大线程数)心里有一定思路了。总结下来就三步:理论预估、压测验证、生产监控动态调整。

程序员江小北 2504

Java线程池七大参数详解和配置

目录一、corePoolSize核心线程数二、maximunPoolSize最大线程数三、keepAliveTime空闲线程存活时间四、unit空闲线程存活时间的单位五、workQueue线程工作队列1、ArrayBlockingQueue FIFO有界阻塞队列2、LinkedBlockingQueue FIFO无限队列3、PriorityBlockingQueue VIP4、SynchronousQueue不缓存任务的阻塞队列六、threadFactory线程工厂七、handler超出线程数和工作队列时候

赵广陆 1万+

2000-2023年各地级市二氧化碳排放量数据/地级市CO2排放量/地级市碳排放数据

2000-2023年各地级市二氧化碳排放量数据/地级市CO2排放量/地级市碳排放数据1、时间:2000-2023年2、来源:EDGAR_2024_GHG of October 20243、指标:年份、省份、城市、城市代码、所属地域、CO2排放总量_吨4、范围:300个地级市

matlab开发-CementingDesign

matlab开发-CementingDesign。固井设计界面

上一篇: 多线程卖票问题(ReentrantLock的使用)
下一篇: 什么是闭锁?(ContDownLatch)
blindore
博客等级 码龄7年 1粉丝 11原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值