线程池
2025-08-22 21:29:17 0 举报
线程池是一种多线程处理形式,它通过复用一组固定的线程来执行任务,从而减少了线程创建和销毁的开销,提高了系统响应速度。它维护一个可重用的工作线程集合,用于执行提交给池的任务,使得任务管理和执行更高效、可控。 核心内容:线程池技术专注于高效的线程管理和使用,通过内部维护线程的创建和再利用机制,优化系统资源分配,提高了程序处理并发请求的能力。 文件类型:通常与线程池相关的代码实现可以是Java类文件(.java),C#源代码文件(.cs),或者跨平台的脚本文件(.py, .sh)。 修饰语:线程池可以被描述为“高效”、“可管理”、“资源优化”、“并发处理”或者“任务执行”,强调了它在多线程编程中的关键优势。
作者其他创作
大纲/内容
线程池
拒绝策略
线程-3
discardOldsetPorxy
否
shutdown()
列
创建线程执行任务
行为:丢弃队列里最早的任务,然后尝试重新提交当前任务。用法:new ThreadPoolExecutor.DiscardOldestPolicy()适用环境:希望最新的任务优先执行,而旧任务可以丢弃。比如 消息推送、缓存刷新等场景,旧任务没意义。缺点:老任务可能还没处理就被丢弃,业务需要能容忍这种丢弃策略。
作用:线程池进入 STOP 状态。已提交但未开始的任务:会返回一个 List<Runnable>(这些任务未执行)。正在执行的任务:会尝试中断(调用 Thread.interrupt())。特点:粗暴关闭 ❗(可能丢任务,也可能中断正在执行的线程)。
线程-6
是
线程-2
阻塞队列是否已满
线程-4
行为:让提交任务的线程自己执行任务(同步执行)。用法:new ThreadPoolExecutor.CallerRunsPolicy()希望不丢任务,但又不想无限制创建线程。提交方线程执行任务,会降低任务提交速度,从而形成“背压”效果。缺点:可能拖慢提交方线程,导致调用链路卡顿。
线程-5
队
提交任务
核心线程数是否已满
abortPorxy
行为:直接丢弃这个任务,不抛异常。用法:new ThreadPoolExecutor.DiscardPolicy()适用环境:可以容忍任务丢失。典型于一些 非关键、日志型、监控上报的任务(例如埋点日志写入失败没关系)。缺点:任务直接丢弃,调用方无感知,容易静默失败。
加入到阻塞队列排队
数
最大线程数是否已满
据
线程池(ThreadPoll)简介:预先创建好若干线程,然后把需要执行的任务交给线程池中的线程去运行。这样避免了每次执行任务创建和销毁线程的开销。为什么要使用线程池: 1. 降低资源消耗:重复利用已创建的资源,减少线程创建和销毁的开销 2. 提升相应速度:任务到达时不需要等待线程的创建,能更快速执行 3. 统一管理:线程池可以对线程数量、超时、队列、等待策略进行集中管理 4. 控制并发:避免无限制创建线程导致oom或cpu被压垮 5. 可扩展性:结合监控(如ThreadPoolExecutor提供的API),能更好地调优和扩展系统为什么在工作中不能使用Executors而需要new ThreadPoolExecutor()来创建线程池: 1. Executors.newFixedThreadPool() / newSingleThreadExecutor() 使用 无界队列(LinkedBlockingQueue),任务太多可能导致 OOM 2. Executors.newCachedThreadPool() 使用 无界最大线程数(Integer.MAX_VALUE),任务太多时可能创建超多线程,导致 CPU 过载 / OOM 3. Executors.newScheduledThreadPool() 使用无界队列,也可能有内存风险。new ThreadPoolExeccutor的七个参数: 1. int corePoolSize:核心线程数 2. int maximumPoolSize:最大线程数 3. long keepAliveTime:空闲线程存活时间 4. TimeUnit unit:时间单位 5. BlockingQueue<Runnable> workQueue:任务队列 6. ThreadFactory threadFactory:线程工厂 7. RejectedExecutionHandler handler:拒绝策略
关闭线程池
线程池创建流程
callerRunsPorxy
shutdownNow()
行为:直接抛出 RejectedExecutionException 异常。用法:默认策略,不传 handler 就是这个。适用环境:任务提交方要感知失败,能捕获异常并做兜底逻辑。典型于一些 核心业务系统(宁可报错,不可丢任务)。缺点:会让提交线程直接异常,影响上游逻辑。
discardPorxy
作用:发出关闭指令,线程池进入 SHUTDOWN 状态。已提交的任务:会继续执行。新提交的任务:会被拒绝。执行流程:线程池等所有任务执行完毕后,线程池真正关闭。特点:温柔关闭 ✅(优雅停机)
0 条评论
下一页