面试题之线程池

线程池的的优势

  • 通过复用的方式,省去了频繁创建线程和销毁线程的资源消耗,从而还能提高响应速度
  • 线程属于稀缺资源,因此使用线程池在一定程度上可以防止系统崩溃

线程池的核心参数(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 @   蓝狐痕  阅读(61)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤
点击右上角即可分享
微信分享提示