Java线程池源码流程图
Java线程池源码流程图 最近研究并发编程,线程池是不得不研究一块,我就整理了一个流程图方便以后回忆,可以对照源码看,方便理解,关于JMM内存模型与AQS, 阻塞队列的分析过两天再整理一个流程图出来
-
为什么要使用线程池,要使用线程的时候我们new Thread不就行了吗?
- 线程是稀缺资源,创建线程会消耗大量资源还会降低系统的稳定性(用户态->内核态)关于这点后续JMM模型时再详细说
-
线程池的优势:
- 重用,一个线程可以循环执行多个任务
- 提高响应速度.当任务来的时候无需等待创建执行
- 提高线程的可管理性,统一分配调优监控
-
什么时候使用线程池?
- 单个任务执行时间比较短
- 需要处理的任务数量大
-
线程池基本结构
- 核心线程
- 非核心线程 可回收
- 阻塞队列
- 拒绝策略
-
基本流程
- 使用核心线程执行
- 核心线程都有任务是放入队列,等到核心线程或非核心线程没任务了取出执行
- 核心线程有任务,队列也满了,创建非核心线程,核心线程加不能超过maximumPoolSize
- 当任务数超过maximumPoolSize,将启用拒绝策略
-
源码流程
ThreadPoolExecutor类中主要的就这四个方法execute,addWorker,内部类Worker中的getTask和runWorker,流程了解后基本可以仿造写一个线程池
如果有哪里说的不对的地方还请指正
作者: JaminYe
版权声明:本文原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。