Java线程池源码流程图

Java线程池源码流程图 最近研究并发编程,线程池是不得不研究一块,我就整理了一个流程图方便以后回忆,可以对照源码看,方便理解,关于JMM内存模型与AQS, 阻塞队列的分析过两天再整理一个流程图出来

  1. 为什么要使用线程池,要使用线程的时候我们new Thread不就行了吗?

    • 线程是稀缺资源,创建线程会消耗大量资源还会降低系统的稳定性(用户态->内核态)关于这点后续JMM模型时再详细说
  2. 线程池的优势:

    1. 重用,一个线程可以循环执行多个任务
    2. 提高响应速度.当任务来的时候无需等待创建执行
    3. 提高线程的可管理性,统一分配调优监控
  3. 什么时候使用线程池?

    1. 单个任务执行时间比较短
    2. 需要处理的任务数量大
  4. 线程池基本结构

    1. 核心线程
    2. 非核心线程 可回收
    3. 阻塞队列
    4. 拒绝策略
  5. 基本流程

    1. 使用核心线程执行
    2. 核心线程都有任务是放入队列,等到核心线程或非核心线程没任务了取出执行
    3. 核心线程有任务,队列也满了,创建非核心线程,核心线程加不能超过maximumPoolSize
    4. 当任务数超过maximumPoolSize,将启用拒绝策略
  6. 源码流程

    ThreadPoolExecutor类中主要的就这四个方法execute,addWorker,内部类Worker中的getTask和runWorker,流程了解后基本可以仿造写一个线程池


如果有哪里说的不对的地方还请指正

posted @ 2020-03-28 20:12  JaminYe  阅读(331)  评论(0编辑  收藏  举报