当前位置: 首页 > news >正文

springboot中线程池的使用

一、概念

        线程池就是将多个线程对象放入一个池子里面,例如一个池塘,线程池就是这个池塘,池塘里面的鱼就是线程池中的多个线程对象。1. 每一个线程,在一段时间内只能执行一个任务。2. 线程池中的各个线程是可以重复使用的。

二、创建线程池的基本步骤

  1. 添加依赖(如果你使用的是Spring Boot,通常已经包含了必要的依赖):

    确保你的pom.xml(Maven)或build.gradle(Gradle)文件中包含了Spring Boot的依赖。

  2. 配置线程池

    在你的Spring Boot配置类(通常带有@Configuration注解)中,你可以创建一个TaskExecutor的Bean。例如,使用ThreadPoolTaskExecutor

    @Configuration  
    @EnableAsync  
    public class AsyncConfig {  @Bean(name = "taskExecutor")  public Executor taskExecutor() {  ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();  executor.setCorePoolSize(5);  executor.setMaxPoolSize(10);  executor.setQueueCapacity(25);  executor.setThreadNamePrefix("Async-");  executor.initialize();  return executor;  }  
    }

    注意@EnableAsync注解,它启用了异步方法的支持。你可以将此注解放在你的配置类上,或者使用@Async注解在你的服务或组件中直接指定某个方法为异步执行。

    线程池的参数说明:

    corePoolSize:核心线程数

    maximumPoolSize:最大线程数

    keepAliveTime:最大空闲时间

    unit:最大空闲时间单位

    workQueue:任务队列

    handler:拒绝策略,有以下四种

    (1)ThreadPoolExecutor.AbortPolicy 丢弃任务,并抛出 RejectedExecutionException 异常。

    (2)ThreadPoolExecutor.CallerRunsPolicy:该任务被线程池拒绝,由调用 execute方法的线程执行该任务。

    (3)ThreadPoolExecutor.DiscardOldestPolicy : 抛弃队列最前面的任务,然后重新尝试执行任务。

    (4)ThreadPoolExecutor.DiscardPolicy,丢弃任务,不过也不抛出异常。

    也可以自己实现RejectedExecutionHandler接口来自定义拒绝策略

  3. 使用线程池

    在你的服务或组件中,你可以使用@Async注解来指定某个方法应该异步执行,并使用上面配置的线程池。Spring会自动使用你配置的TaskExecutor来执行这些方法。

    @Service  
    public class AsyncService {  @Autowired  private TaskExecutor taskExecutor; // 也可以使用@Qualifier指定具体的Bean名,如@Qualifier("taskExecutor")  // 或者你可以直接通过@Async注解并使用默认配置的线程池  @Async  public void asyncMethod() {  // 异步执行的代码  }  // 使用自定义的TaskExecutor执行异步任务  public void executeAsync(Runnable task) {  taskExecutor.execute(task);  }  
    }

    请注意,如果你的AsyncService中的方法是通过接口定义的,并且你正在使用基于接口的代理(这是Spring AOP的默认行为),那么只有通过代理调用这些方法时,@Async注解才会生效。这意味着,如果你从同一个类的另一个方法中调用带有@Async注解的方法,它不会异步执行。

  4. 监控和调优

     

    你可以使用Spring Boot的Actuator模块来监控你的线程池。通过添加Actuator的依赖并启用相关端点,你可以查看线程池的实时状态,如当前线程数、活动线程数、任务队列大小等。这有助于你根据应用程序的实际需求调整线程池的配置。

相关文章:

springboot中线程池的使用

一、概念 线程池就是将多个线程对象放入一个池子里面,例如一个池塘,线程池就是这个池塘,池塘里面的鱼就是线程池中的多个线程对象。1. 每一个线程,在一段时间内只能执行一个任务。2. 线程池中的各个线程是可以重复使用的。 二、创…...

ubuntu20.04 开机自动挂载外加硬盘

文章目录 一、问题描述二、操作1. 查找新添盘符2. 格式化硬盘文件系统3. 挂载硬盘4. 开机自动挂载5. 取消挂载6. 查看挂载的硬盘信息 一、问题描述 因电脑使用一段时间后自身硬盘不足,需外加硬盘使得电脑自动识别加载。 二、操作 1. 查找新添盘符 sudo blkid自己…...

5.18 TCP机械臂模拟

#include <netinet/tcp.h>//包含TCP选项的头文件 #include <arpa/inet.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <linux/input.h>//读取输入事件 #include <sys/types.h> #include <sys/stat.h&…...

linux---线程控制

线程和进程 以前我们要同时跑多个程序&#xff0c;可以通过fork()多个子进程&#xff0c;然后通过系统函数进行程序的替换&#xff0c;但是创建进程代价大&#xff0c;不仅要拷贝一份父进程的地址空间&#xff0c;页表&#xff0c;文件表述符表等。但是线程不需要因为是进程的…...

低代码开发:拖拽式可视化构建工业物联网系统

什么是低代码&#xff1f; 低代码(Low Code)是一种可视化的软件开发方法&#xff0c;通过最少的手动编码可以更快地交付应用程序。低代码平台的图形用户界面和拖放功能可自动执行开发过程的各个方面&#xff0c;从而消除对传统计算机编程方法的依赖。 什么是低代码平台&#…...

【撸源码】【ThreadPoolExecutor】线程池的工作原理深度解析——上篇

1. 前言 线程池这块&#xff0c;作为高频面试题&#xff0c;并且实际使用场景巨多&#xff0c;所以出了这篇文章&#xff0c;一块来研究一下线程池的实现原理&#xff0c;运行机制&#xff0c;从底层深挖&#xff0c;不再局限于面试题。 2. 线程池概览 2.1. 构造器 线程池总…...

webpack 学习之 五大核心

为什么用 webpack webpack 官网传送门 … 官网&#xff1a;webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。将你项目中所需的每一个模块组合成一个或多个 bundles&#xff0c;它们均为静态资源&#xff0c;用于展示你的内容。总结&#xff1a;汇总所有模块…...

Android逆向抓包技巧 - Hook 底层通信

一,请求的本质 平时开发使用的 http 或 https 均属于应用层的协议,其本质都会调用 TCP 发送请求。 例如:你在 Python 中使用 requests 模块发送一个 http 请求,其底层就是使用 socket 模块 + TCP 实现发送的请求。 import requestsres = requests.get("http://wiki…...

深入解析力扣162题:寻找峰值(线性扫描与二分查找详解)

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…...

模板方法及设计模式——Java笔记

模板方法及设计模式 抽象类体现的就是一种模板模式的设计&#xff0c;抽象类作为多个子类的通用模板&#xff0c;子类在抽象类的基础上进行扩展、改造&#xff0c;但子类总体上会保留抽象类的行为方式。 解决的问题&#xff1a; 当功能内部一部分实现是确定的&#xff0c;另一…...

K8S认证|CKA题库+答案| 11. 创建PVC

11、创建PVC 您必须在以下Cluster/Node上完成此考题&#xff1a; Cluster Master node Worker node ok8s master …...

多微信如何高效管理?一台电脑就能搞定!

对于有多个微信号的人来说&#xff0c;管理这些微信无疑是一道难题。 今天&#xff0c;就给大家分享一个能够让你高效管理多个微信号的神器——个微管理系统&#xff0c;下面&#xff0c;就一起来看看它都有哪些功能吧&#xff01; 1、多号同时登录在线 系统支持多个微信号同…...

安装harbor出现问题: Running 1/1 ✘ Network harbor_harbor Error

安装harbor出现问题&#xff1a; [] Running 1/1 ✘ Network harbor_harbor Error 0.2s failed to create network harbor_harbor: Error response from daemon: Fa…...

JVM解释器和即时编译器的工作原理

1、解释器&#xff1a; 当Java程序启动时&#xff0c;JVM的解释器首先读取Java字节码&#xff08;通常存在于.class文件中&#xff09;。 解释器将字节码解析为相应的指令&#xff0c;每条指令对应JVM中的一个操作。 解释器根据指令的类型和操作数&#xff0c;执行相应的计算或…...

【产品经理】输出

引言&#xff1a;        在最近频繁的产品管理职位面试中&#xff0c;我深刻体会到了作为产品经理需要的不仅仅是对市场和技术的敏锐洞察&#xff0c;更多的是在复杂多变的环境中&#xff0c;如何运用沟通、领导力和决策能力来引导产品从概念走向市场。这一系列博客将分享…...

MySQL入门学习.数据库组成.存储引擎

存储引擎是 MySQL 数据库的一个重要组成部分&#xff0c;它决定了数据的存储方式、索引方式、事务支持等特性。MySQL 支持多种存储引擎&#xff0c;常见的有 InnoDB、MyISAM、Memory 等。 存储引擎的特点和使用方法&#xff1a; 1. InnoDB&#xff1a; 是 MySQL 默认的存储引…...

【算法】分治 - 快速排序

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、颜色分类二、排序数组三、数组中的第k个数四、最小的k个数总结 引言 本节主要介绍快速排序&#xf…...

设计模式13——桥接模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 桥接模式&#xff08;Bridge&a…...

第十六讲:数据在内存中的存储

第十六讲&#xff1a;数据在内存中的存储 1.整数在内存中的存储1.1存储方式1.2大小端字节序1.3大小端字节序排序规则1.4为什么要有大小端1.5练习1.5.1练习11.5.2练习21.5.3练习31.5.4练习41.5.5练习51.5.6练习61.5.7练习7 2.浮点数在内存中的存储2.1练习2.2浮点数的存储2.3浮点…...

【EXCEL_VBA_基础知识】15 使用ADO操作外部数据

课程来源&#xff1a;王佩丰老师的《王佩丰学VBA视频教程》&#xff0c;如有侵权&#xff0c;请联系删除&#xff01; 目录 1. 使用ADO链接外部数据源 2. 常用SQL语句&#xff08;Execute(SQL语句)&#xff09; 2.1 查询数据、查询某几个字段、带条件查询、合并两表数据、插…...

解锁Unity游戏定制潜能:MelonLoader全方位应用指南

解锁Unity游戏定制潜能&#xff1a;MelonLoader全方位应用指南 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader 副标题&#xff…...

小爱音箱音乐自由播放器:解锁无限听歌体验的完整指南

小爱音箱音乐自由播放器&#xff1a;解锁无限听歌体验的完整指南 【免费下载链接】xiaomusic 使用小爱音箱播放音乐&#xff0c;音乐使用 yt-dlp 下载。 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaomusic 你是否厌倦了音乐平台的各种限制&#xff1f;是否想…...

张量维度操控心法:从reshape到升维降维,吃透PyTorch形状操作的底层逻辑

✨ 张量维度操控心法&#xff1a;从reshape到升维降维&#xff0c;吃透PyTorch形状操作的底层逻辑&#x1f510; 张量形状操作的黄金法则&#xff1a;形状是视角&#xff0c;内容是本质&#x1f527; reshape函数&#xff1a;零侵入的形状重塑神器核心原理与执行规则实操代码与…...

千问3.5-2B在办公提效场景:会议白板照片文字提取+要点总结实战

千问3.5-2B在办公提效场景&#xff1a;会议白板照片文字提取要点总结实战 1. 办公场景的痛点与解决方案 1.1 会议记录的传统困境 每次开完会&#xff0c;最让人头疼的就是整理会议记录了。特别是那些在白板上写满讨论要点的会议&#xff0c;你需要&#xff1a; 对着白板照片…...

ROBLEX嵌入式驱动库技术解析与机器人控制实践

1. ROBLEX开发套件底层驱动库技术解析ROBLEX开发套件是一套面向教育与原型验证的嵌入式硬件平台&#xff0c;其核心由主控底板&#xff08;通常基于STM32F4系列MCU&#xff09;与可插拔功能模块&#xff08;如电机驱动、红外测距、超声波测距、环境传感器、LED阵列、蜂鸣器、编…...

别再手写表单了!用Vue3+AI做个自己的低代码设计器,5分钟搞定一个页面

用Vue3AI打造个人专属低代码表单设计器&#xff1a;5分钟解放重复劳动 如果你是一名中后台开发者&#xff0c;每天被各种CRUD表单折磨得焦头烂额&#xff0c;这篇文章就是为你准备的。想象一下&#xff1a;当你接到第100个类似的用户管理表单需求时&#xff0c;不再需要从零开始…...

避坑指南:PyTorch QAT模型部署时,你的推理结果为什么对不上?从量化参数到计算细节的排查思路

PyTorch QAT模型部署实战&#xff1a;量化推理结果异常的全链路诊断手册 当你的量化感知训练&#xff08;QAT&#xff09;模型在部署环节突然"翻车"——推理结果与训练时相差甚远&#xff0c;这种场景就像精心调制的咖啡在最后一刻被打翻。本文将带你深入量化模型的黑…...

Tomato Novel Downloader:智能搜索功能的技术突破

Tomato Novel Downloader&#xff1a;智能搜索功能的技术突破 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 在数字阅读工具领域&#xff0c;用户体验的每一个细节都可能决定…...

写段代码教会你什么是HOOK技术?HOOK技术能干什么?

起因是我想在搞一些操作windows进程的事情时&#xff0c;老是需要右键以管理员身份运行&#xff0c;感觉很麻烦。就研究了一下怎么提权&#xff0c;顺手瞄了一眼Windows下用户态权限分配&#xff0c;然后也是感谢《深入解析Windows操作系统》这本书给我偷令牌的灵感吧&#xff…...

手机号查询QQ号:技术解析与实用指南

手机号查询QQ号&#xff1a;技术解析与实用指南 【免费下载链接】phone2qq 项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq 当你更换手机后忘记QQ账号&#xff0c;或需要验证手机号与QQ的绑定关系时&#xff0c;phone2qq项目提供了一种高效解决方案。这是一个基…...