线程池的的优势
- 通过复用的方式,省去了频繁创建线程和销毁线程的资源消耗,从而还能提高响应速度
- 线程属于稀缺资源,因此使用线程池在一定程度上可以防止系统崩溃
线程池的核心参数(7个)
- corePoolSIze:核心线程数,这些线程一旦被创建就不会被销毁,直到线程池被销毁
- maximumPoolSize:最大线程数,当核心线程数被使用完,并且任务队列满了时,如果还有任务就会创建线程直到最大线程数
- keepAliveTime:空闲时间,除核心线程外的其他线程的最大空闲时间,当到达这个时间就会销毁这些线程
- unit:空闲时间的时间单位
- workQueue:任务队列,当核心线程用完了时,如果还有任务就会放到该阻塞队列中,等待核心线程的调度
- threadFactory:创建线程的工厂,由程序员指定创建线程的方式
- handler:拒绝策略,当达到最大线程数并且阻塞队列已满时,如果还有任务就会触发拒绝策略
handler拒绝策略
- ThreadPoolExecutor.AbortPolicy() :抛出java.util.concurrent.RejectedExecutionException异常
- ThreadPoolExecutor.CallerRunsPolicy() : 重试添加当前的任务,他会自动重复调用execute()方法
- ThreadPoolExecutor.DiscardOldestPolicy() : 抛弃旧的任务
- ThreadPoolExecutor.DiscardPolicy() : 抛弃当前的任务
线程池的创建方式
- newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
- newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
- newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
- newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
posted @
2022-03-18 16:39
蓝狐痕
阅读(
61)
评论()
编辑
收藏
举报
点击右上角即可分享
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤