java线程池参数及合理设置

news/2025/2/9 8:46:33/

java线程池参数及合理设置

线程池的7大核心参数

corePoolSize

  • 核心线程数目核心线程会一直存活,及时没有任务需要执行,当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理当设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭

maximumPoolSize 最大线程数目

  • 当空闲线程时间达到 keepAliveTime,线程会关闭,直到数量等于corePoolSize

keepAliveTime空闲时间

unit 时间单位

  • 超过核心线程的生存时间单位,如秒、毫秒等。

workQueue 阻塞队列

  • LinkedBlockingQueue:无界队列,容量Integer.MAX_VALUE,(FixedThreadPool 和 SingleThreadExecutor 线程池的线程数是固定的,用的就是LinkedBlockingQueue)
  • SynchronousQueue:直接提交的任务队列(CachedThreadPool 的最大线程数是 Integer.MAX_VALUE,用的是SynchronousQueue)
  • ArrayBlockingQueue:指定队列大小(corePoolSize >队列>maximumPoolSize )

threadFactory 线程工厂

  • 可以定制线程对象的创建,例如设置线程名字、是否是守护线程等。

handler 拒绝策略

  • AbortPolicy:终止策略。超过最大承载、执行拒绝任务时,会直接抛出一个类型为RejectedExecutionException 的 RuntimeException异常
  • CallerRunsPolicy:调用者执行策略。超过承载,执行策略时,调用者线程执行任务。
  • DiscardOldestPolicy:丢弃最早任务策略。超过承载,丢弃队列中最早的任务。若线程池关闭,则舍弃。
  • DiscardPolicy:丢弃策略。超过承载,丢弃任务。
  • 实现RejectedExecutionHandler接口,自定义策略

线程池参数的合理设置

  • tasks,程序每秒需要处理的最大任务数量
  • tasktime,单线程处理一个任务所需要的时间
  • responsetime,系统允许任务最大的响应时间

corePoolSize

  • 每个任务需要tasktime秒处理,则每个线程每秒可处理1/tasktime个任务。系统每秒有tasks个任务需要处理,则需要的线程数为:tasks/(1/tasktime)。即tasks*tasktime个线程数。具体数字最好根据8020原则,即80%情况下系统每秒任务数

queueCapacity:任务队列的长度

  • 任务队列的长度要根据核心线程数,以及系统对任务响应时间的要求有关。队列长度可以设置为(corePoolSize/tasktime)responsetime

maxPoolSize:最大线程数

  • 当系统负载达到最大值时,核心线程数已无法按时处理完所有任务,这时就需要增加线程。每秒200个任务需要20个线程,那么当每秒达到1000个任务时,则需要(1000-queueCapacity)*(20/200)。

keepAliveTime

  • keepAliveTiime设定值可根据任务峰值持续时间来设定。
  • 以上关于线程数量的计算并没有考虑CPU的情况。若结合CPU的情况,比如,当线程数量达到50时,CPU达到100%,则将maxPoolSize设置为60也不合适,此时若系统负载长时间维持在每秒1000个任务,则超出线程池处理能力,应设法降低每个任务的处理时间(tasktime)。

http://www.ppmy.cn/news/1295601.html

相关文章

SpringBoot 中实现订单30分钟自动取消的策略

简介 在电商和其他涉及到在线支付的应用中,通常需要实现一个功能:如果用户在生成订单后的一定时间内未完成支付,系统将自动取消该订单。 本文将详细介绍基于Spring Boot框架实现订单30分钟内未支付自动取消的几种方案,并提供实例…

drop,delete和truncate的区别

drop,delete和truncate的区别 delete和truncate只删除表数据,不删除表结构;速度:delete 逐条删除,truncate整体删除,一般来说 drop > truncate > delete。delete 删除后自增列不会重置,truncate 删除…

机器学习周刊第二期:300个机器学习应用案例集

大家好 前文:机器学习项目精选 第一期 继续分享我最近看过并觉得非常硬核的资源,包括Python、机器学习、深度学习、大模型等等。 1、Python编程挑战 地址:https://github.com/Asabeneh/30-Days-Of-Python 30天Python编程挑战是一个逐步学…

YOLOv5改进 | 损失函数篇 | EIoU、SIoU、WIoU、DIoU、FocusIoU等二十余种损失函数

一、本文介绍 这篇文章介绍了YOLOv5的重大改进,特别是在损失函数方面的创新。它不仅包括了多种IoU损失函数的改进和变体,如SIoU、WIoU、GIoU、DIoU、EIOU、CIoU,还融合了“Focus”思想,创造了一系列新的损失函数。这些组合形式的损失函数超过了二十余种,每种都针对特定的…

Mac环境下Parallels Desktop 19的安装和使用

为了后续构建漏洞靶场和渗透测试环境,我们需要提前准备好几套与宿主机隔离的工作环境(Windows、Linux等),在Mac上最常用的就是Paralles Desktop(PD)工具了,当前最新版本为19。接下来介绍如何安装…

react antd,echarts全景视图

1.公告滚动,40s更新一次 2.echarts图标 左右轮播 60s更新一次 3.table 表格 import { useState, useEffect } from react;import Slider from react-slick; import slick-carousel/slick/slick-theme.css; import slick-carousel/slick/slick.css;import Layout fro…

二叉树与堆的深度解析:数据结构中的关键概念及应用

. 个人主页:晓风飞 专栏:数据结构|Linux|C语言 路漫漫其修远兮,吾将上下而求索 文章目录 前言树概念注意: 树的基本概念及术语基本概念及术语以家谱为例 树的表示孩子兄弟表示法简介优势应用示例 树在实际中的运用文件系统的目录树…

简易留言板功能

在Web开发中,留言板是一个常见的功能,它允许用户在网站上留下他们的信息或反馈。虽然现在有很多现成的留言板解决方案,但了解如何从头开始实现它仍然很有价值。本文将引导您逐步实现一个简易的留言板功能,只使用JavaScript、HTML和…