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

线程池的类型

① FixedThreadPool

线程数固定的线程池
线程池参数:

  • 核心线程数和最大线程数一致
  • 非核心线程线程空闲存活时间,即keepA1iveTime为0
  • 阳塞队列为无界队列 LinkedBlockingQueue

工作机制:

  1. 提交线程任务
  2. 如果线程数少于核心线程,创建核心线程执行任务
  3. 如果线程数等于核心线程,把任务添加到 LinkedBlockingQueue 阻塞队列
  4. 如果线程执行完任务,去阻塞队列取任务,继续执行

使用场景:适用于处理 CPU 密集型的任务,确保 CPU 在长期被工作线程使用的情况下,尽可能的少的分配线程,即适用执行长期的任务。

 

② CachedThreadPool

可缓存线程池,线程数根据任务动态调整的线程池

线程池参数:

  1. 核心线程数为 8
  2. 最大线程数为 Integer.MAX_VALUE
  3. 工作队列是 synchronousQueue 同步队列
  4. 非核心线程空闲存活时间为 60

工作机制:

  1. 提交线程任务
  2. 因为核心线程数为0,所以任务直接加到 synchronousQueue 工作队列
  3. 判断是否有空闲线程,如果有,就去取出任务执行
  4. 如果没有空闲线程,就新建一个线程执行
  5. 执行完任务的线程,还可以存活 60 秒,如果在这期间,接到任务,可以继续存活下去;否则
  6. 被销毁。

使用场景:用于并发执行大量短期的小任务。

 

③ SingleThreadExecutor

单线程化的线程池

线程池参数

  • 核心线程数为 1
  • 最大线程数也为 1
  • 阳塞队列是 LinkedBlockingQueue
  • 非核心线程空闲存活时间为 

使用场景:适用于串行执行任务的场景,将任务按顺序执行。


④ ScheduledThreadPoo

能实现定时、周期性任务的线程池

线程池参数:

  • 最大线程数为 Integer.MAX VALUE
  • 阻塞队列是 DelayedWorkQueue
  • keepAliveTime为0

使用场景:周期性执行任务,并且需要限制线程数量的需求场景。


http://www.mrgr.cn/news/31184.html

相关文章:

  • 【测试】博客系统测试报告
  • mybatisplus乐观锁
  • Nginx处理带有分号“;“的路径
  • 【手把手】Windows上安装Python,小白必看
  • 编辑器拓展(入门与实践)
  • VSCode 定义代码模板
  • 云手机的便捷性和安全性体现在哪?
  • Linux--禁止root用户通过ssh直接登录
  • halcon ocr mlp 识别问题
  • 模型参数选择——交叉验证
  • Google Play金融类应用上了又被下,怎么搞定设备短信权限问题?
  • neo4j导入csv数据
  • linux内核 devtmpfs介绍
  • 【Python常用模块】_cx_Oracle模块详解
  • PyQt5中使用文件选择对话框指南
  • nodejs 012:Babel(巴别塔)语言转换与代码兼容
  • PDF样本册如何分享到朋友圈
  • Android View 的绘制流程
  • 复制这个盒子内容的时候,会触发这个盒子的点击事件
  • C#自定义曲线绘图面板