前言
讲到多线程,怎么能不说说线程池呢?接下来说一下线程池的原理分析。
叙述
什么是线程池
线程池顾名思义就是事先创建若干个可执行的线程放入一个池(容器)中,需要的时候从池中获取线程不用自行创建,使用完毕不需要销毁线程而是放回池中,从而减少创建和销毁线程对象的开销。
目的
先来看看我们为什么要使用线程池呢?
目的:降低资源消耗,提高程序的效率,方便管理。
- 降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗。频繁的创建线程,非常占用CPU内存
- 提高效率:当任务到达时,任务可以不需要等待线程创建就能立即执行。
- 方便管理:统一分配、调优和监控。合理利用线程池。
线程池的分类
线程池分为四种
- newCachedThreadPool:可缓存线程池,无限大小
- newFixedThreadPool:可固定长度的线程池
- newScheduledThreadPool:定长、周期性线程池
- newSingleThreadExecutor:单线程化线程池
线程池的实现原理
线程池的核心构造函数:ThreadPoolExecutor()
这个构造函数需要两个十分关键的参数corePoolSize,maximumPoolSize
- corePoolSize—核心线程数
- maximumPoolSize—最大线程数
核心线程数和最大线程数的区别是是什么呢?
-
核心线程数:实际运行线程数
-
最大线程数:线程池最多创建多少个线程
在这里就需要把我的图上上来了:
接下来小咸儿介绍一下这个流程图:
- 1、用户提交线程给线程池,线程池先判断是否大于核心线程数,若不大于,则执行任务,否则执行第二步
- 2、判断缓存队列是否已满,没有满,则进入缓存队列中,等待线程执行,否则执行第三步
- 3、判断是否大于最大线程数,大于则拒绝执行任务,否则执行第四步
- 4、重新创建线程,执行任务
总结
对于多线程,小咸儿先将自己认知中的内容多做总结,接下还会进行更加深入的学习和实践。
感谢您的阅读~~