线程池-待补充

创建线程的方式有哪些?

一种是通过 Executors 创建,
另一种是通过 ThreadPoolExecutorPools 创建

创建方式的优缺点?

不建议使用 Executors 创建线程,建议使用 ThreadPoolExecutorPools 创建方式进行自定义配置,因为 Executors 创建方式的缺点是无法进行自定义配置,而 ThreadPoolExecutorPools 可以通过自定义配置来满足不同的需求。

线程池的参数有哪些

一共有七个参数。

  • 第一个是核心线程数(corePoolSize),表示线程池中始终存在的线程数;
  • 第二个是最大线程数(maximumPoolSize),表示线程池中允许的最大线程数,当线程池中的任务队列满了之后可以创建的最大线程数;
  • 第三个是最大线程数可以存活的时间(maximumPoolSize),当线程中没有任务执行时,最大线程就会销毁一部分,最终保持核心线程数量的线程;
  • 第四个是时间单位(unit),用于设定线程的存活时间,有七种可以选择,包括天、小时、分、秒、毫秒、微妙和纳秒;
  • 第五个是一个阻塞队列(unit),用来存储线程池等待执行的任务,包含七种类型
    ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列。
    LinkedBlockingQueue:一个由链表结构组成的有界阻塞队列。
    SynchronousQueue:一个不存储元素的阻塞队列,即直接提交给线程不保持它们。
    PriorityBlockingQueue:一个支持优先级排序的无界阻塞队列。
    DelayQueue:一个使用优先级队列实现的无界阻塞队列,只有在延迟期满时才能从中提取元素。
    LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。与SynchronousQueue类似,还含有非阻塞方法。
    LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。
  • 第六个是线程工厂(threadFactory),主要用来创建线程,默认为正常优先级,非守护线程;
  • 第七个是拒绝策略(handler),用于拒绝处理任务时的策略,系统有四种可选。默认的策略为抛出异常。
    AbortPolicy:拒绝并抛出异常
    CallerRunsPolicy:使用当前调用的线程来执行任务
    DiscardOldestPolicy:抛弃队列头部(最旧)的一个任务,并执行当前任务
    DiscardPolicy:忽略并抛弃当前任务

参考链接:https://mp.weixin.qq.com/s/v3FT9-xsZRxiNGVUalXvLg

posted @   渝思  阅读(10)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2020-01-12 java.Thread——多线程
点击右上角即可分享
微信分享提示