说一下线程池的核心参数,线程池的执行原理知道嘛

发布于 2024-07-17
659

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

扫码阅读
手机扫码阅读
线程池核心参数及执行原理

线程池核心参数及执行原理

1. 线程池的核心参数

线程池的七大核心参数如下:

  • corePoolSize: 核心线程数目。
  • maximumPoolSize: 最大线程数目,包括核心线程与救急线程。
  • keepAliveTime: 救急线程的生存时间,超时后释放资源。
  • unit: 时间单位,如秒、毫秒等。
  • workQueue: 阻塞队列,存储待执行任务。
  • threadFactory: 线程工厂,用于定制线程对象。
  • handler: 拒绝策略,当线程池满时决定如何处理任务。

2. 线程池的执行原理

线程池的执行机制包括以下步骤:

  1. 任务提交时,优先分配核心线程执行任务。
  2. 如果核心线程已满,则任务存入阻塞队列。
  3. 当阻塞队列满时,判断是否可以创建救急线程执行任务。
  4. 如果所有线程都忙,则触发拒绝策略。

拒绝策略

  • AbortPolicy: 默认策略,抛出异常。
  • CallerRunsPolicy: 使用提交任务的线程执行任务。
  • DiscardOldestPolicy: 丢弃队列中最前的任务并执行当前任务。
  • DiscardPolicy: 直接丢弃任务。

3. 常见阻塞队列

阻塞队列用于存储待执行任务,常见类型包括:

  • ArrayBlockingQueue: 基于数组结构的有界队列。
  • LinkedBlockingQueue: 基于链表结构的有界队列。
  • DelayedWorkQueue: 优先级队列,出队任务时间最靠前。
  • SynchronousQueue: 不存储元素,每次插入操作需等待移除操作。

ArrayBlockingQueue与LinkedBlockingQueue区别

LinkedBlockingQueue ArrayBlockingQueue
默认无界,支持有界 强制有界
底层是链表 底层是数组
读写各有一把锁,性能较好 读写公用一把锁,性能相对较差

4. 线程池的种类

Java提供了四种常见线程池的创建方式:

  • FixedThreadPool: 固定线程数的线程池,适用于任务量已知且耗时任务。

springboot葵花宝典