java 线程池核心配置与介绍

Java线程池知识点小结 查看调用发现,原来后台有一个处理字符串并将内容写入到文本文件的操作,综合来看相当于一个计算型任务,由于这个任务不是很经常出现,所以开发者就设置两个线程,并且为了让任务能够正确完成,拒绝策略也是使用。上文提到使用execute提交无返回值的任务,这样异常就会被感知,但还需要注意的是频繁的抛出异常会让线程消亡,导致线程池每次执行新任务时回去创建新的线程。所以我们建议,对于线程池的中的任务尽可能不要用异常来处理逻辑,对于可以预见的异常,我们建议手动处理返回,避免线程销毁再创建的开销。的线程数继续处理应急任务呢? 阅读详情

线程池是什么、为什么要用线程池 参考 美团线程池实现原理介绍

参数的原始构造
ThreadPoolExecutor( int corePoolSize, 
                    int maximumPoolSize, 
                    long keepAliveTime, TimeUnit unit, 
                    BlockingQueue<Runnable> workQueue, 
                    ThreadFactory threadFactory,
                    RejectedExecutionHandler handler)
参数解释
  • corePoolSize
    线程池中的核心线程数,当提交一个任务时,线程池创建一个新线程执行任务,直到当前线程数等于corePoolSize;如果当前线程数为corePoolSize,继续提交的任务被保存到阻塞队列中,等待被执行;如果执行了线程池的prestartAllCoreThreads()方法,线程池会提前创建并启动所有核心线程。

  • maximumPoolSize
    线程池中允许的最大线程数。如果当前阻塞队列满了,且继续提交任务,则创建新的线程执行任务,前提是当前线程数小于maximumPoolSize;

  • keepAliveTime
    线程空闲时的存活时间,即当线程没有任务执行时,继续存活的时间;默认情况下,该参数只在线程数大于corePoolSize时才有用;

  • unit
    keepAliveTime的单位;

  • workQueue
    用来保存等待被执行的任务的阻塞队列,且任务必须实现Runable接口,在JDK中提供了如下阻塞队列:
    1、ArrayBlockingQueue:基于数组结构的有界阻塞队列,按FIFO排序任务;
    2、LinkedBlockingQuene:基于链表结构的阻塞队列,按FIFO排序任务,吞吐量通常要高于ArrayBlockingQuene;
    3、SynchronousQuene:一个不存储元素的阻塞队列,每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态,吞吐量通常要高于LinkedBlockingQuene;
    4、priorityBlockingQuene:具有优先级的无界阻塞队列;

  • threadFactory
    创建线程的工厂,通过自定义的线程工厂可以给每个新建的线程设置一个具有识别度的线程名。

  • handler
    线程池的饱和策略,当阻塞队列满了,且没有空闲的工作线程,如果继续提交任务,必须采取一种策略处理该任务,线程池提供了4种策略:
    1、AbortPolicy:直接抛出异常,默认策略;
    2、CallerRunsPolicy:用调用者所在的线程来执行任务;
    3、DiscardOldestPolicy:丢弃阻塞队列中靠最前的任务,并执行当前任务;
    4、DiscardPolicy:直接丢弃任务;
    当然也可以根据应用场景实现RejectedExecutionHandler接口,自定义饱和策略,如记录日志或持久化存储不能处理的任务。

运行状态

在这里插入图片描述
生命周期:
在这里插入图片描述

任务执行机制

1、首先检测线程池运行状态,如果不是RUNNING,则直接拒绝,线程池要保证在RUNNING的状态下执行任务。
2、如果workerCount < corePoolSize,则创建并启动一个线程来执行新提交的任务。
3、如果workerCount >= corePoolSize,且线程池内的阻塞队列未满,则将任务添加到该阻塞队列中。
4、如果workerCount >= corePoolSize && workerCount < maximumPoolSize,且线程池内的阻塞队列已满,则创建并启动一个线程来执行新提交的任务。
5、如果workerCount >= maximumPoolSize,并且线程池内的阻塞队列已满, 则根据拒绝策略来处理该任务, 默认的处理方式是直接抛异常。
在这里插入图片描述

Executors工具类

在这里插入图片描述

周期类的区别

在这里插入图片描述

线程池的终止

shutdown: 线程池被终止后,继续提交的任务会被拒绝。已经被提交的任务,会等待执行完成后,再结束
shutdownNow: 终止后,继续提交的任务会被拒绝,正在执行的任务会触发 interrupeed方法,未执行的任务会被返回

十二、连接池线程池配置——线程池 如果需要在 Spring Boot 中创建自定义线程池(例如用于特定的任务或服务),可以使用。 阅读详情

相关推荐

ExecutorService详解:Java 17线程池管理从零到一

本文深度解析Java 17中ExecutorService线程池管理技术,涵盖线程池核心概念、参数配置、拒绝策略、动态调整及企业级实战案例。通过代码示例详解FixedThreadPool、CachedThreadPool等类型选择,结合监控指标与调优策略,帮助开发者构建高性能、可扩展的并发架构,解决资源竞争与系统过载问题。

全栈 1505

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

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

赵广陆 1万+

IFIX5.8在Win10系统下的安装避坑指南

本文提供了IFIX5.8在Windows 10系统下的详细安装教程与避坑指南。针对常见的驱动缺失、UAC拦截及兼容性报错等问题,文章从安装前准备、分步安装流程到安装后配置与驱动修复,给出了系统性的解决方案,帮助工控从业者顺利完成部署。

f6g7h8i9j的博客 364

java线程池配置

在并发编程中,线程池是一种重要的工具,它能够管理和复用线程,提高程序的性能和资源利用率。然而,线程池的配置是一个关键的问题,不合理的配置可能会导致性能问题或资源浪费。本文将详细讲解线程池的配置参数及其含义,帮助您正确地配置线程池。线程池的配置对于并发编程的性能和资源利用率至关重要。通过合理地配置线程池的参数,可以提高程序的性能和响应速度。本文详细讲解了线程池的配置参数及其含义,并提供了一个示例代码帮助读者理解和使用线程池。

果酱 の 博客 3925

MATLAB演示元胞自动机算法

一、元胞自动机理论 元胞自动机与格子理论是一个非常好的模型,许多复杂的问题都可以通过它来建立模型,下面就简要介绍一下。 元胞自动机 实质上是定义在一个具有离散、有限状态的元胞组成的元胞空间上,并按照一定的局部规则,在离散的时间维度上演化的动力学系统。 元胞 元胞又可称为单元、细胞,是元胞自动机的最基本的组成部分。 元胞具有以下特点: 元胞自动机最基本的单元。 元胞有记忆贮存状态的功...

frange zone 2万+

自定义LayoutManager实现android-pile-layout滑动卡片堆叠效果

这是我的第一篇博客,总算有个契机开始写博客了,就从自定义LayoutManager开始吧。 前段时间看到一个项目(android-pile-layout),效果特别不错,这是效果图: 效果确实不错,我看了下实现,是用的自定义的ViewGroup实现的,计算什么还搞的挺复杂的,具体的没细看。作者说也尝试过用LayoutManager实现,但是没找到合适的数学模型,好吧,看到数学模型我

u014296305的博客 1万+

Java配置线程池

ThreadPoolTaskExecutor 提供了更多的配置选项,例如线程池的最大线程数、核心线程数、缓冲队列大小、线程命名前缀、线程池饱和策略等等,同时可以方便地集成到 Spring 应用中。IO密集型 和 CPU密集型 任务的特点不同,因此针对不同类型的任务,选择不同类型的线程池可以获得更好的性能表现。​ 因此,线程池的线程数应该设置较小,以充分利用CPU的计算能力,避免过多的线程切换和上下文切换导致的性能损失。对于这类任务,线程的执行时间主要取决于IO操作的速度,而非CPU的执行能力。

Gefangenes的博客 2468

告别WSL!用AMD ROCm7在Windows上跑ComfyUI,我的幻x2025 AI Max+ 395体验与性能调优心得

本文详细介绍了在搭载AMD Ryzen AI Max+ 395处理器的幻x2025笔记本上,如何通过ROCm7在Windows原生环境下高效运行ComfyUI,并分享了一系列性能调优技巧和实战经验,帮助开发者摆脱WSL束缚,提升AI创作效率。

weixin_29102619的博客 1114

Java 线程池配置 详细分析

线程池配置及分析 IO密集型,CPU密集型 Java

qq_25720801的博客 3630

告别理论!手把手教你用Patran/Nastran搞定悬臂翼的颤振分析(附完整模型文件)

本文提供了一份详细的Patran/Nastran悬臂翼颤振分析实战指南,涵盖从几何建模到结果解读的全过程。通过手把手教学和完整模型文件,帮助工程师和学生快速掌握气动弹性分析技术,特别适合需要实际操作的初学者。文章重点介绍了模态分析、气动建模和颤振求解等关键步骤,并提供了常见问题排查和优化建议。

weixin_30879169的博客 492

【unity】【WebRTC】从0开始创建一个Unity远程媒体流app-构建可同步场景

本文介绍了如何利用Unity和WebRTC技术实现远程画面传输。通过配置Render Streaming组件、设置信令管理器和视频流发送器,构建了一个可同步的Unity场景。文中详细说明了从场景搭建到浏览器端测试的完整流程,并提供了常见问题排查方法。该方案适用于远程调试、云游戏、VR共享等场景,具有低延迟、高兼容性等特点。文章还包含项目源码下载链接,方便读者实践操作。最终实现了Unity端到浏览器端的实时画面传输,为后续实现双向互动奠定了基础。

每日出拳老爷子的博客 1841

《JAVA线程池的核心配置参数和流程》

本文深入解析Java线程池的核心机制,重点介绍ThreadPoolExecutor的7个关键配置参数:核心线程数(保证基本并发能力)、最大线程数(限制资源使用)、存活时间(动态调整线程数量)、任务队列(缓冲任务)、线程工厂(统一管理线程)和拒绝策略(处理超载任务)。文章详细阐述了线程池"核心线程→队列→非核心线程→拒绝策略"的四步工作流程,并给出实践建议:根据CPU核心数设置线程数,优先使用有界队列,避免Executors工具类的潜在OOM风险,推荐直接使用ThreadPoolExecu

cyf123__的博客 888

数控系统(CNC)系列:Hurco VMX42SR_(3).控制系统硬件组成部分

控制箱是CNC系统的核心部分,负责处理所有的控制指令和数据。它通常包含主控板、电源模块、接口板等关键组件。伺服驱动器是CNC系统中的关键组件,负责将主控板发出的控制信号转换为电机所需的驱动电流。它通过闭环控制确保电机的精确运动。电机是CNC系统中的执行机构,负责实现主控板发出的运动指令。常见的电机类型包括步进电机和伺服电机。传感器是CNC系统中的重要组件,用于检测和反馈机床的运行状态。常见的传感器类型包括位置传感器、速度传感器、温度传感器等。电源供应系统为CNC系统的所有组件提供电力。主电源。

2401_87715305的博客 1279

线程池参数及配置

线程池-线程池参数及配置 在实际项目中线程的应用都会使用线程池来管理,线程池的常用参数及配置学习记录。 目录 线程池-线程池参数及配置 一、线程池 在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在 Java 中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。 如果并发的线程数多,并且每个线程都是...

xinpz的博客 1万+

30.Labview如何读懂别人程序、修改程序?

之前写过一次教大家的文章,这次教大家如何学习别人的程序,和如何搭建一套适合自己的程序框架。这里事先说明一下:要想搭好程序框架,一定要先把自己的系统,逻辑是什么!这非常重要,是决定你程序的关键因素。废话不多扯,直接说重点。

关注我,更多技术问题欢迎私聊~ 2446

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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

线程池的核心参数 corePoolSize(核心线程数) (1)核心线程会一直存在,即使没有任务执行; (2)当线程数小于核心线程数的时候,即使有空闲线程,也会一直创建线程直到达到核心线程数; (3)设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭。 queueCapacity(任务队列容量) 也叫阻塞队列,当核心线程都在运行,此时再...

凡尘炼心的博客 9653

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java 线程池 参数 详解

java 线程池 参数 详解

T_Y_F_的博客 4147

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java线程池详解:高效并发编程的核心利器

线程池就像一个"线程工厂",它预先创建一定数量的工作线程并放在"池子"里待命。当有任务需要执行时,不需要重新创建线程,而是直接从池子里取一个空闲线程来干活。任务完成后,线程不会被销毁,而是重新回到池子里等待下一个任务。这就好比一个餐厅,与其每来一个客人就临时招聘一个服务员,不如提前雇好几个服务员待命,这样既节省了招聘成本,又能保证服务质量。线程池是Java并发编程的核心工具,掌握其原理和配置对于构建高性能应用至关重要。

dsgdauigfs的博客 1242

线程池7大核心参数介绍

1ThreadPoolExecutor创建线程池 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnab.

爪哇人的博客 1万+

线程池的核心配置参数和流程

线程池是管理和复用线程的高效机制,核心思想是通过线程复用降低资源消耗并提高响应速度。ThreadPoolExecutor的核心配置参数包括corePoolSize、maximumPoolSize、keepAliveTime等,配合不同的任务队列和拒绝策略,可灵活适应不同业务场景。执行流程遵循"核心线程优先-任务队列缓冲-非核心线程补充-拒绝策略兜底"的层级处理逻辑,实现资源的最优调配。合理配置线程池参数能有效提升系统性能,同时避免资源耗尽风险。

m0_63478844的博客 743

花几分钟看懂如何配置线程池的核心线程数

目录 一、背景 二、什么是CPU核数和逻辑处理器数 三、CPU密集型和IO密集型 四、线程池核心线程数确定 五、代码实现-ThreadPoolTaskExecutor 一、背景 为了实现异步,需要将任务开新的线程去处理调三方接口等,从而不影响主线程的工作。而配置线程池可以方便线程的管理,减少线程创建、摧毁带来的性能消耗和提高响应速度等。这篇文章将简单介绍如何配置线程池。 二、什么是CPU核数和逻辑处理器数 ctrl+alt+delete打开任务管理器,打开性能,如下图我的机器配置,可.

神韵 7561

Java并发——线程池参数与使用

线程池参数与使用Java线程池核心类线程池参数corePoolSizemaximumPoolSizekeepAliveTimeunitworkQueueThreadFactoryhandler任务提交到线程池的过程通俗的理解Java提供的线程池默认配置 Java线程池核心类 java 中线程池的核心类是j.u.c包下的ThreadPoolExecuter,继承自AbstractExecuterSe...

jychenzju的博客 581

线程池调优实战:打造高性能Java应用的核心技术

本文全面解析了Java线程池的核心概念与工作原理,详细讲解了ThreadPoolExecutor的七大核心参数、任务提交流程、以及线程池的生命周期管理。通过丰富的代码示例和图表,文章还介绍了如何合理配置线程池、处理异常和进行监控,旨在帮助开发者更高效地使用线程池构建高性能Java应用。

专注分享编程开发与技术进阶干货! 1036

【多线程】线程池核心数到底如何配置?

本期内容主要介绍线程池核心数的配置,介绍 JMX 相关内容,其底层是 MBeans ,并举例使用 JMX 与 jconsole 动态配置线程池~

爱编程爱运动的博客 6183

java线程池详解

Executors场景核心线程最大线程队列类型拒绝策略说明CPU 密集CPU 核数核数控制上下文切换IO 密集核数×2核数×2~4有界队列防止内存膨胀高并发高并发数高并发×2快速失败顺序执行11保证顺序定时任务按需设置按需设置使用如果你有具体的业务场景(如消息队列消费、Web接口处理、批量处理等),我可以帮你单独设计一个更合理的线程池配置,想要吗?

2301_79652490的博客 854

java线程池介绍

本次针对http请求线程池使用介绍线程池应用场景:1.当后台一个功能需要调用几个http接口(各个接口不相互依赖),如果不用线程池(同步请求),那么一个接一个地调用,耗时比较长,所以大部分时间花在等待接口的处理上,如果使用线程池(异步请求),那么几个http接口调用可以同时进行,并缩短了等待时间(一般中大型公司会使用到该场景,一般用户触碰到某个功能没有反应就是会影响用户体验)。2.当HTTP线程池...

感冒石头的博客 520
上一篇: MYSQL系列之 锁与死锁
下一篇: LRU算法介绍、优化、使用场景(Redis、MySQL、Memcached)
Kindle_code
博客等级 码龄12年 21粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值