Java线程池源码解析深度探讨?

2026-05-27 21:090阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计5261个文字,预计阅读时间需要22分钟。

Java线程池源码解析深度探讨?

核心机制+在深入分析源码之前,我们先回顾和熟悉下线程序的核心工作原理。线程池工作原理+线程池采用的是生产者-消费者模型,如下所示:+主线程调用execute或submit等方法提交任务+任务被提交到线程池中+线程池中的线程执行任务

核心机制

再分析源码之前,我们还是先回顾和熟悉下线程的核心工作机制。

线程池工作原理

线程池采用的是一种生产者-消费者的模型,如下图:

  • 主线程调用execute、或者submit等方法提交任务给线程池。
  • 如果线程池中正在运行的工作线程数量小于corePoolSize(核心线程数量),那么马上创建线程运行这个任务。
  • 如果线程池中正在运行的工作线程数量大于或等于 corePoolSize(核心线程数量),那么将这个任务放入队列,稍后执行。
  • 如果这时队列满了且正在运行的工作线程数量还小于 maximumPoolSize(最大线程数量),那么会创建非核心工作线程立刻运行这个任务,这部分非核心工作线程空闲超过一定的时间(keepAliveTime)时,就会被销毁回收。
  • 如果最终提交的任务超过了maximumPoolSize(最大线程数量),那么就会执行拒绝策略。
  • 线程池状态

    线程池的状态有5种,他们的状态转换如上图所示,这里记得区别线程的状态,它们不是一回事。

    ThreadPoolExecutor类存放线程池的状态信息很特别,是存储在一个int类型原子变量的高3位,而低29位用来存储线程池当前运行的线程数量。

    阅读全文

    本文共计5261个文字,预计阅读时间需要22分钟。

    Java线程池源码解析深度探讨?

    核心机制+在深入分析源码之前,我们先回顾和熟悉下线程序的核心工作原理。线程池工作原理+线程池采用的是生产者-消费者模型,如下所示:+主线程调用execute或submit等方法提交任务+任务被提交到线程池中+线程池中的线程执行任务

    核心机制

    再分析源码之前,我们还是先回顾和熟悉下线程的核心工作机制。

    线程池工作原理

    线程池采用的是一种生产者-消费者的模型,如下图:

  • 主线程调用execute、或者submit等方法提交任务给线程池。
  • 如果线程池中正在运行的工作线程数量小于corePoolSize(核心线程数量),那么马上创建线程运行这个任务。
  • 如果线程池中正在运行的工作线程数量大于或等于 corePoolSize(核心线程数量),那么将这个任务放入队列,稍后执行。
  • 如果这时队列满了且正在运行的工作线程数量还小于 maximumPoolSize(最大线程数量),那么会创建非核心工作线程立刻运行这个任务,这部分非核心工作线程空闲超过一定的时间(keepAliveTime)时,就会被销毁回收。
  • 如果最终提交的任务超过了maximumPoolSize(最大线程数量),那么就会执行拒绝策略。
  • 线程池状态

    线程池的状态有5种,他们的状态转换如上图所示,这里记得区别线程的状态,它们不是一回事。

    ThreadPoolExecutor类存放线程池的状态信息很特别,是存储在一个int类型原子变量的高3位,而低29位用来存储线程池当前运行的线程数量。

    阅读全文