Java-线程池(八股)

创建方法:Java原生创建线程池与Spring创建线程池

Java原生创建线程池:

一、手动创建ThreadPollExecutor

// Java原生线程池核心构造方法 ThreadPoolExecutor threadPool = new ThreadPoolExecutor( int corePoolSize, // 核心参数1:核心线程数(常驻线程数) int maximumPoolSize, // 核心参数2:最大线程数(线程池能创建的最大线程数) long keepAliveTime, // 核心参数3:空闲线程存活时间 TimeUnit unit, // 核心参数4:存活时间的单位(秒/毫秒等) BlockingQueue<Runnable> workQueue, // 核心参数5:任务阻塞队列(核心线程满了放这里) ThreadFactory threadFactory, // 核心参数6:线程工厂(自定义线程名称、优先级等) RejectedExecutionHandler handler // 核心参数7:拒绝策略(队列满+线程满时的处理方式) );

二、Spring创建线程池

核心类是ThreadPoolTaskExecutor。

纯注解方式(@Configuration+@Bean,SpringBoot首选)

代码示例:

步骤一:编写线程类的核心配置类:
@Configuration public class SpringThreadPoolConfig { @Bean("customThreadPool") public Executor customThreadPool() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(2); executor.setMaxPoolSize(5); executor.setQueueCapacity(10); executor.setKeepAliveSeconds(30); executor.setThreadNamePrefix("SPRING-THREAD-POOL-"); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); // 初始化线程池(必须调用,否则线程池不生效) executor.initialize(); return executor; } }
步骤二:业务代码中注入并使用线程池
@Service public class ThreadPoolService { // 注入线程池:@Qualifier指定Bean的名称,避免多个线程池时注入失败 @Autowired @Qualifier("customThreadPool") private Executor customThreadPool; // 业务方法中执行异步任务 public void doAsyncTask() { for (int i = 1; i <= 5; i++) { int finalI = i; customThreadPool.execute(() -> { System.out.println(Thread.currentThread().getName() + " 执行异步任务:" + finalI); try { Thread.sleep(1000); } catch (InterruptedException e) {e.printStackTrace();} }); } } }

三、Spring线程池(@Async异步注解)

步骤1:在配置类上添加@EnbaleAsync注解(开启异步支持)
@Configuration @EnableAsync public class SpringThreadPoolConfig { @Bean("customThreadPool") public Executor customThreadPool() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(2); executor.setMaxPoolSize(5); executor.setQueueCapacity(10); executor.setKeepAliveSeconds(30); executor.setThreadNamePrefix("SPRING-THREAD-POOL-"); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); executor.initialize(); return executor; } }
步骤2:在业务方法上添加@Async(线程池Bean名)注解
@Service public class AsyncTaskService { /** * 被@Async注解的方法,会被自动提交到指定的线程池异步执行 * 无需手动调用线程池,Spring自动处理,无感知! */ @Async("customThreadPool") public void doAsyncTask(int taskId) { System.out.println(Thread.currentThread().getName() + " 执行异步任务:" + taskId); try { Thread.sleep(1000); } catch (InterruptedException e) {e.printStackTrace();} } }
步骤3:调用该方法即可(同步调用,异步执行)
@Controller public class TaskController { @Autowired private AsyncTaskService asyncTaskService; @GetMapping("/task") public String doTask() { for (int i = 1; i <= 5; i++) { // 同步调用,但方法内部会异步执行 asyncTaskService.doAsyncTask(i); } return "success"; } }

线程池的种类:

1、newCachedThreadPool

创建一个可缓存线程池,如果当前线程池的长度超过了处理的需要时,它可以灵活的回收空闲的线程。当需要增加的时候,可以灵活的添加新的线程,不会对线程的长度做出任何限制。

2、newFixedThreadPool

创建一个定长线程池,可以控制线程最大并发数,超出的线程会在队列中等待。

3、newScheduledThreadPool

创建一个固定长度的线程池,支持定时的以及周期性的任务执行

4、newSingleThreadExecutor

创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,如果这个唯一的线程因为异常结束,那么会有一个新的线程来代替它,它保证前一项任务执行完毕后才执行后一项。保证所有任务按照指定顺序执行。

线程池的拒绝策略:

AbortPolicy,默认

线程池的默认拒绝策略,如果线程池满了丢掉这个任务并且抛出RejectedExecutionExcepitio异常

DiscardPolicy

是AbortPolicy的silent版本,如果线程池队列满了,会直接丢掉这个任务并且不会有任何异常。

DiscardOldestPolicy

丢弃最老的。如果队列满了,会将最早进入队列的任务删掉腾出空间,再尝试加入队列。

CallerRunsPolicy

如果添加到线程池失败,那么调用线程会自己去执行该任务,不会等待线程池中的线程去执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1161048.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qwen All-in-One功能测评:轻量级模型的多任务表现如何?

Qwen All-in-One功能测评&#xff1a;轻量级模型的多任务表现如何&#xff1f; 1. 背景与挑战&#xff1a;边缘场景下的AI部署困境 随着大语言模型&#xff08;LLM&#xff09;在智能客服、情感分析、对话系统等场景中的广泛应用&#xff0c;企业对AI服务的部署灵活性和成本控…

Python3.10生物信息学:云端处理基因数据,隐私有保障

Python3.10生物信息学&#xff1a;云端处理基因数据&#xff0c;隐私有保障 你是不是也遇到过这样的情况&#xff1f;作为一名医学研究生&#xff0c;手头有一堆基因测序数据等着分析——比如RNA-seq、WES&#xff08;全外显子组测序&#xff09;或者GWAS数据。可医院配的电脑…

STM32波形发生器设计:ADC反馈控制应用

用STM32打造高精度波形发生器&#xff1a;从PWM到ADC闭环控制的实战之路你有没有遇到过这样的情况——辛辛苦苦在STM32上生成了一个正弦波&#xff0c;结果接上负载后幅度突然掉了下来&#xff1f;或者环境温度一变&#xff0c;输出信号就开始“飘”了&#xff1f;这正是传统开…

5个AI图像增强工具对比测评:Super Resolution镜像免配置推荐

5个AI图像增强工具对比测评&#xff1a;Super Resolution镜像免配置推荐 1. 选型背景与评测目标 在数字内容爆炸式增长的今天&#xff0c;图像质量直接影响用户体验。无论是老照片修复、社交媒体配图优化&#xff0c;还是视频帧增强&#xff0c;低分辨率图像的超清重建已成为…

Hunyuan-OCR模型微调入门:云端GPU+预置数据集开箱即用

Hunyuan-OCR模型微调入门&#xff1a;云端GPU预置数据集开箱即用 你是不是也遇到过这样的情况&#xff1f;AI培训班马上结业&#xff0c;手头有个OCR识别项目要交&#xff0c;但学校的服务器排队排到下周&#xff0c;本地电脑又跑不动大模型。更头疼的是&#xff0c;你的数据是…

Vllm-v0.11.0避坑指南:云端自动配环境,避开CUDA版本冲突

Vllm-v0.11.0避坑指南&#xff1a;云端自动配环境&#xff0c;避开CUDA版本冲突 你是不是也经历过这样的“噩梦”&#xff1f;想体验最新的大语言模型推理框架 vLLM v0.11.0&#xff0c;结果刚打开终端就陷入无限循环的报错&#xff1a;CUDA not available、PyTorch version i…

VibeThinker-1.5B显存不足?轻量模型GPU适配优化部署教程

VibeThinker-1.5B显存不足&#xff1f;轻量模型GPU适配优化部署教程 1. 引言&#xff1a;低成本小参数模型的推理潜力 随着大模型在自然语言处理、代码生成和数学推理等任务上的广泛应用&#xff0c;其高昂的训练与推理成本也逐渐成为落地瓶颈。微博开源的 VibeThinker-1.5B …

基于sbit的多设备状态监控程序设计指南

基于sbit的多设备状态监控程序设计实战指南在工业控制和嵌入式系统开发中&#xff0c;我们常常面临一个看似简单却极易出错的问题&#xff1a;如何高效、可靠地监测多个外部设备的状态&#xff1f;比如一台自动化设备上同时连接了启动按钮、急停开关、门禁传感器、温度报警器……

如何提升语音清晰度?FRCRN语音降噪镜像快速上手指南

如何提升语音清晰度&#xff1f;FRCRN语音降噪镜像快速上手指南 在远程会议、语音通话和音频录制等场景中&#xff0c;背景噪声常常严重影响语音的可懂度与沟通效率。FRCRN语音降噪技术基于深度学习模型&#xff0c;在单通道麦克风输入条件下实现高质量语音增强&#xff0c;显…

麦橘超然工业设计案例:产品原型AI渲染方案

麦橘超然工业设计案例&#xff1a;产品原型AI渲染方案 1. 引言 在现代工业设计领域&#xff0c;快速生成高质量的产品视觉原型已成为提升研发效率的关键环节。传统3D建模与渲染流程耗时较长&#xff0c;难以满足敏捷开发的需求。随着生成式AI技术的成熟&#xff0c;基于扩散模…

Qwen3-1.7B enable_thinking参数使用详解

Qwen3-1.7B enable_thinking参数使用详解 1. 引言&#xff1a;理解Qwen3-1.7B的双模式推理机制 随着大模型在企业级和边缘场景中的广泛应用&#xff0c;如何在响应速度与推理深度之间取得平衡成为关键挑战。Qwen3-1.7B作为阿里巴巴于2025年4月开源的新一代轻量级语言模型&…

BGE-Reranker-v2-m3实战教程:RAG系统检索精度提升保姆级指南

BGE-Reranker-v2-m3实战教程&#xff1a;RAG系统检索精度提升保姆级指南 1. 引言 1.1 RAG系统的瓶颈与挑战 在当前主流的检索增强生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;系统中&#xff0c;向量数据库通过语义嵌入&#xff08;Embedding&#xff…

AI读脸术环境配置太复杂?试试这个免安装网页版,GPU云端调用

AI读脸术环境配置太复杂&#xff1f;试试这个免安装网页版&#xff0c;GPU云端调用 你是不是也遇到过这种情况&#xff1a;作为一名产品设计师&#xff0c;想测试一个AI读脸UI方案&#xff0c;却被AnacondaPytorch的安装过程劝退&#xff1f;下载、配置、依赖冲突、版本不兼容…

AI赋能全流程,重塑需求管理新生态——Visual RM需求数智化平台核心能力解析

在数字化研发浪潮席卷全球的今天&#xff0c;需求分析作为项目推进的“源头活水”&#xff0c;其效率与质量直接决定研发周期、成本与最终成果价值。传统需求管理模式依赖人工操作&#xff0c;普遍深陷文档编写耗时费力、需求拆解颗粒不均、跨部门协同壁垒重重、变更影响评估滞…

看完就想试!Live Avatar生成的数字人视频太逼真了

看完就想试&#xff01;Live Avatar生成的数字人视频太逼真了 1. 引言&#xff1a;实时数字人技术的新突破 近年来&#xff0c;随着大模型和生成式AI的快速发展&#xff0c;数字人&#xff08;Digital Human&#xff09;技术正从影视级制作走向大众化应用。阿里联合多所高校开…

Open Interpreter错误回环机制:Qwen3-4B自动修正代码部署案例

Open Interpreter错误回环机制&#xff1a;Qwen3-4B自动修正代码部署案例 1. 引言&#xff1a;本地AI编程的现实挑战与Open Interpreter的定位 在当前大模型驱动的开发范式中&#xff0c;将自然语言转化为可执行代码的能力正成为提升生产力的关键。然而&#xff0c;大多数AI编…

开源项目推荐:CH340驱动源码下载与使用说明

从零搭建稳定串口通信&#xff1a;CH340芯片与开源驱动实战全解析 你有没有遇到过这样的场景&#xff1f; 手里的开发板插上电脑&#xff0c;设备管理器里却显示“未知USB设备”&#xff1b;或者明明接好了线&#xff0c;烧录程序时总卡在第一步&#xff0c;提示“无法连接到…

Qwen3-1.7B镜像更新日志解读:新特性与兼容性说明

Qwen3-1.7B镜像更新日志解读&#xff1a;新特性与兼容性说明 1. 技术背景与版本演进 Qwen3&#xff08;千问3&#xff09;是阿里巴巴集团于2025年4月29日开源的新一代通义千问大语言模型系列&#xff0c;涵盖6款密集模型和2款混合专家&#xff08;MoE&#xff09;架构模型&…

VibeThinker-1.5B代码补全:云端VS Code方案5分钟上手

VibeThinker-1.5B代码补全&#xff1a;云端VS Code方案5分钟上手 你是不是也遇到过这种情况&#xff1a;想用AI帮你写代码&#xff0c;装了一堆插件&#xff0c;结果不是报错就是响应慢得像蜗牛&#xff1f;好不容易配好环境&#xff0c;模型又占满内存&#xff0c;电脑直接卡…

VibeThinker-1.5B优化建议:提升代码生成准确率

VibeThinker-1.5B优化建议&#xff1a;提升代码生成准确率 1. 引言 在当前AI辅助编程快速发展的背景下&#xff0c;轻量级模型因其低部署成本、高响应速度和隐私保障能力&#xff0c;正逐渐成为开发者日常编码中的实用工具。VibeThinker-1.5B作为微博开源的小参数语言模型&am…