Java线程池参数、执行流程及线程数配置建议

article/2025/10/18 11:11:23

1. 线程池参数详解

  • corePoolSize:线程池中常驻核心线程数;
  • maximumPoolSize:线程池能够容纳同时执行的最大线程数;
  • keepAliveTime:多余的空闲线程存活时间;
  • unit:keepAliveTime的时间单位;
  • workQueue:任务队列,被提交但尚未执行的任务;
  • threadFactory:表示生成线程池中的工作线程的线程工厂;可以用来设定线程名、是否为daemon线程等等;
  • handler:拒绝策略。

1.1. workQueue类型

  • ArrayBlockingQueue:基于数组的有界阻塞队列,先进先出;
  • LinkedBlockingQuene:基于链表的无界阻塞队列,先进先出;
  • SynchronousQuene:一个不缓存任务的阻塞队列,没有可用线程时会直接执行拒绝策略;
  • PriorityBlockingQueue:具有优先级的无界阻塞队列,优先级通过参数Comparator实现(二叉堆)。

1.2. handler类型

  • CallerRunsPolicy:在调用者线程中执行run方法;
  • AbortPolicy:丢弃任务,并抛出RejectedExecutionException异常;
  • DiscardPolicy:丢弃任务;
  • DiscardOldestPolicy:丢弃最早进入队列的任务,然后尝试将此任务加入队列。

2. 执行流程

在这里插入图片描述
注意:
线程池中的线程并未标记哪些是核心线程,哪些是临时线程。当线程池中的工作线程数超过核心线程数时,利用队列的poll(long timeout, TimeUnit unit)方法获取线程任务,当超过设置的存活时间未获取到任务时,线程运行结束等待JVM自然回收,由此可见创建的“临时线程”会一直执行任务直至队列为空;当线程池中的工作线程数不超过核心线程数时,调用的是take()方法让线程一直处于阻塞状态而不被回收,从而保证线程池的线程数维持在核心线程数以内。

3. 线程数配置建议

3.1. 任务类型

任务分为I/O密集型任务和CPU密集型任务。

  • I/O密集型:包括磁盘I/O,网络I/O。指的是任务中I/O操作占据主要时间,此时往往对CPU的使用率不高;
  • CPU密集型:又叫计算密集型。指的是任务中计算逻辑占据主要时间,此时往往对CPU会有比较高的使用率。

3.2. 配置建议

我们在程序中使用多线程的主要目的就是充分调动计算机资源用于提升程序性能。线程数设置的过少则计算机资源利用不充分,设置的过多则会造成大量线程切换反而影响程序性能,所以合理的配置线程数尤为重要。

  • I/O密集型:最佳线程数 = (1/CPU利用率) = 1 + (I/O耗时/CPU耗时);一般为2*CPU核心数;
  • CPU密集型:最佳线程数 = CPU核心数+1;+1是为了预防有个线程被阻塞,CPU可以调用其他线程。

http://chatgpt.dhexx.cn/article/5yYXEwEZ.shtml

相关文章

tomcat线程池参数

tomcat线程池executor配置参数 详解tomcat的连接数与线程池

线程池参数及队列

线程池中各个参数的含义 参数名含义corePoolSize核心线程数maximumPoolSize最大线程数keepAliveTime时间单位空闲线程的存活时间workQueue用于存放任务的队列threadFactory线程工厂、用来创建新线程handler处理别拒绝的任务 corePoolSize是核心线程数,也就是常驻线…

Java线程池参数分析

线程池组成 创建线程池 创建线程池通过Executors的工厂方法来创建线程池实例。 实际上Executors创建的线程池实例最终都是通过实例化配置不同参数的ThreadPoolExecutor对象。 public static ExecutorService newFixedThreadPool(int nThreads) {return new ThreadPoolExecuto…

java线程池参数_java线程池参数设置原则,如何设置线程池参数比较合理?

线程池的参数应该怎样设置呢?相信对于很多的人来说这也是一个比较难的问题,下面就让我们一起来解决一下,究竟应该如何设置线程池的参数才是最合理的吧! 首先在设置参数的时候,有以下的几点是我们需要考虑到的! 1、下游系统抗并发的能力 多线…

线程池参数如何设置?

前言 着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池:ThreadPoolExecutor类,帮助开发人员管理线程并方便地执行并行任务。了解并合理…

动态调整线程池参数实践

欢迎大家关注我的微信公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。 一、线程池遇到的挑战 我们上一篇 《一文读懂线程池的实现原理 》已经从线程池如何维护自身状态、线程池如何管理任务、线程…

线程池参数及配置

线程池-线程池参数及配置 在实际项目中线程的应用都会使用线程池来管理,线程池的常用参数及配置学习记录。 目录 线程池-线程池参数及配置 一、线程池 1、线程池的优势 二、线程池常用参数 ThreadPoolExecutor 1. corePoolSize:核心线程数 2. que…

线程池7个参数描述

所谓的线程池的 7 大参数是指&#xff0c;在使用 ThreadPoolExecutor 创建线程池时所设置的 7 个参数&#xff0c;如以下源码所示&#xff1a; public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable&…

Java线程池七个参数详解

java多线程开发时&#xff0c;常常用到线程池技术&#xff0c;这篇文章是对创建java线程池时的七个参数的详细解释。 从源码中可以看出&#xff0c;线程池的构造函数有7个参数&#xff0c;分别是corePoolSize、maximumPoolSize、keepAliveTime、unit、workQueue、threadFactory…

【Android UI】贝塞尔曲线 ② ( 二阶贝塞尔曲线公式 | 三阶贝塞尔曲线及公式 | 高阶贝塞尔曲线 )

文章目录 一、二阶贝塞尔曲线公式二、三阶贝塞尔曲线三、高阶贝塞尔曲线 贝塞尔曲线参考 : https://github.com/venshine/BezierMaker 一、二阶贝塞尔曲线公式 二阶贝塞尔曲线公式如下 : B ( t ) ( 1 − t ) 2 P 0 2 t ( 1 − t ) P 1 t 2 P 2 , t ∈ [ 0 , 1 ] B(t) (1- t…

浅谈贝塞尔曲线

浅谈贝塞尔曲线 前段时间做了一个手写板功能的东西&#xff0c;其中手写部分用二次贝塞尔曲线完成&#xff0c;今天就来总结一下贝塞尔曲线在Android中的应用&#xff0c;先简单介绍各阶贝塞尔曲线的原理&#xff0c;然后实现通过贝塞尔曲线实现波浪线功能&#xff0c;感兴趣的…

View系列:贝塞尔曲线专栏:绘制二阶贝塞尔曲线(二)

1&#xff1a;Android贝塞尔曲线Api 作用相关Api备注移动起点moveTo移动下一次操作的起点位置连接直线lineTo添加上一个点到当前点的直线Path贝塞尔曲线qyadTo / cubicTo分别为绘制二次和三次贝塞尔曲线的方法闭合路径close从第一个点连接到最后一个点&#xff0c;形成一个闭合…

贝塞尔曲线原理

1 前言 贝塞尔曲线 (Bzier curve) 由法国数学家 Pierre Bzier 于 1962 年提出的一种矢量曲线&#xff0c;广泛应用于工程绘图、动画设计等领域。贝塞尔曲线是一种运动轨迹曲线&#xff0c;由 n 个点在 n 条线段上匀速运动&#xff08;不同线段上的速度可能不同&#xff09;&…

贝塞尔曲线简单介绍

什么是贝塞尔曲线&#xff1f; Bzier curve(贝塞尔曲线) 是应用于二维图形应用程序的数学曲线。 曲线定义&#xff1a;起始点、终止点&#xff08;也称锚点&#xff09;、控制点。通过调整控制点&#xff0c;贝塞尔曲线的形状会发生变化。 1962年&#xff0c;法国数学家Pierre…

贝塞尔曲线原理简述

1. 曲线算法简介&#xff1a; 贝塞尔曲线应用于二维图形应用程序的数学曲线&#xff0c;由一组控制点的向量来确定&#xff0c;给定的控制点按顺序连接构成控制多边形&#xff0c;贝塞尔曲线逼近这个多边形&#xff0c;进而通过调整控制点坐标改变曲线的形状。 2. 绘制曲线 …

贝塞尔曲线动画C++简单实践

目录 贝塞尔曲线简介一阶贝塞尔二阶贝塞尔三阶贝塞尔N阶贝塞尔曲线 贝塞尔曲线在动画中的应用实践求曲线散点坐标将曲线应用到动画动画框架cmd动画窗口动画 完整代码示例代码核心类代码BezierCurveAnimatorConsole 参考资料 贝塞尔曲线简介 由于用计算机画图大部分时间是操作鼠…

贝塞尔曲线及实践案例

文章目录 1. 前言2. 介绍2.1 一阶贝济埃曲线2.2 二阶贝塞尔曲线2.3 三阶贝塞尔曲线 3. 一、二、三阶贝塞尔曲线实现4. 案例5. 后记 1. 前言 贝塞尔曲线(Bzier curve)&#xff0c;又称贝兹曲线或贝济埃曲线&#xff0c;是应用于二维图形应用程序的数学曲线。一般的矢量图形软件…

贝塞尔曲线工具类

贝塞尔曲线工具类 先上一张效果图看效果 贝塞尔曲线 用于计算N阶贝塞尔曲线上的点&#xff0c;根据传入控制点的个数判定阶数N 贝塞尔曲线计算公式: 工具类源码 public class BezierUtils {/*** 获取二项式系数** param l 行(杨辉三角)* param c 列(杨辉三角)* return 系…

贝塞尔曲线打断生成两个贝塞尔曲线

问题&#xff1a;如何将一个三阶贝塞尔曲线打断生成两个三阶贝塞尔曲线&#xff0c;生成的两条贝塞尔曲线与原来的贝塞尔曲线重合&#xff1f; 输入&#xff1a;一条贝塞尔曲线的四个控制点P1,C1,C2,P2,和一个打断点E(E在曲线上) 输出&#xff1a;两条贝塞尔曲线: P1,F,I,E E,J…

html5贝塞尔曲线,Canvas学习:贝塞尔曲线

在绘制圆和圆弧一节中,了解到在Canvas中可以使用arc()和arcTo()绘制制圆或弧线,但很多时候,仅这两个方法还不能满足我们实际的需求,特别是绘制复杂的曲线。不过值得庆幸的是,在Canvas中还提供了其他的方法可以帮助我们绘制复杂的曲线。那就是我们今天要说的贝塞尔曲线,在…