美文网首页
线程池参数设置

线程池参数设置

作者: boyiis | 来源:发表于2020-06-24 10:42 被阅读0次

为了提高系统吞吐量和系统响应时间,线程池设置需要根据以下参数配置
tasks: 每秒的任务数,假设为1000
taskcost:每个任务花费时间,假设为0.1s
responsetime:系统允许容忍的最大响应时间,假设为1s

  1. corePoolSize = 每秒需要多少个线程处理?
    threadcount = tasks/(1/taskcost) = tasks * taskcost = 1000 * 0.1 = 100 个线程。corePoolSize设置应该大于50,根据80,20原则,如果80%的每秒任务数小于800,那么corePoolSize设置为80即可

  2. queueCapacity = (corePoolSize/taskcost)*responsetime
    计算可得queueCapacity = 80 / 0.1 *1 = 80。意思是队列里面的线程可以等待1s,超过则需要新开线程来执行,切记不能设置为Integer.MAX_VALUE。这样队列会很大,线程数只会保持在corePoolSize大小,当任务剧增时,不能新开线程来执行,响应时间会随之剧增。

  3. maxPoolSize = (max(tasks) - queueCapacity)/(1/taskcost)
    计算可得 maxPoolSize = (1000 - 80)/10 = 92 (最大任务数-队列容量)/每个线程每秒处理能力 = 最大线程数

  4. rejectedExecutionHandler:根据具体情况来定,任务不重要可以丢弃,任务重要则需要利用一些缓冲机制来处理,keepAliveTime和allowCoreThreadTimeout采用默认通常能满足

以上都是理想值,实际情况下需要根据机器性能来决定,如果在未达到最大线程数的情况下机器的cpu load已经满了,则需要通过升级硬件和优化代码,降低taskcost来处理。

相关文章

  • 线程池参数设置

    为了提高系统吞吐量和系统响应时间,线程池设置需要根据以下参数配置tasks: 每秒的任务数,假设为1000task...

  • 动态线程池的监控与设置实现

    当前大部分的java应用都会用到线程池,但是线程的参数设置是一个无法预估的值,必须要根据线上的实际情况来确定线程池...

  • Java线程池参数设置

    1、默认值 corePoolSize=1queueCapacity=Integer.MAX_VALUEmaxPoo...

  • 面试问题汇总

    Zxing扫描优化 http超时返回 线程池种类 sql注入 原理 解决办法 摄像头参数设置 更新UI的几种方式 ...

  • java线程池

    线程VS线程池 普通线程使用 创建线程池 执行任务 执行完毕,释放线程对象 线程池 创建线程池 拿线程池线程去执行...

  • java----线程池

    什么是线程池 为什么要使用线程池 线程池的处理逻辑 如何使用线程池 如何合理配置线程池的大小 结语 什么是线程池 ...

  • Java线程池的使用

    线程类型: 固定线程 cached线程 定时线程 固定线程池使用 cache线程池使用 定时调度线程池使用

  • Spring Boot之ThreadPoolTaskExecut

    初始化线程池 corePoolSize 线程池维护线程的最少数量keepAliveSeconds 线程池维护线程...

  • 线程池

    1.线程池简介 1.1 线程池的概念 线程池就是首先创建一些线程,它们的集合称为线程池。使用线程池可以很好地提高性...

  • 多线程juc线程池

    java_basic juc线程池 创建线程池 handler是线程池拒绝策略 排队策略 线程池状态 RUNNIN...

网友评论

      本文标题:线程池参数设置

      本文链接:https://www.haomeiwen.com/subject/vftrfktx.html