- 一、线程池简介
- 二、线程池初始化方法简介
- 三、线程池使用示例
线程池一般是实现了 ExecutorService 接口的类 , 一般使用 ThreadPoolExecutor 线程池 ;
线程池优势 :
减少线程对象个数 : 避免每次执行子线程任务时 , 都要执行 new Thread() 构造函数 , 避免每次创建一个新的对象 , 减少开销 ;
线程管理 : 方面对线程进行管理 , 已存在的线程直接重用 , 这样减少了线程对象创建的个数 , 降低了 CPU 资源开销 ;
控制并发数 : 每个 CPU 都有最合适的并发线程数 , 如果并发数过高 , 就会导致资源竞争 , 线程堵塞 , 合理控制并发数 , 能提高 CPU 使用效率 ;
二、线程池初始化方法简介线程池初始化方法简介 :
newCachedThreadPool : 创建 可缓存线程池 ; 如果线程池长度超过处理需要 , 则回收线程 , 如果不能回收 , 就创建新线程 ;
newFixedThreadPool : 创建 定长线程池 ; 可以设置线程最大并发数 , 如果并发数已满 , 后续任务会在任务队列中等待 ;
newScheduledThreadPool : 创建 定长周期任务线程池 ; 该线程池支持周期性任务执行 ;
newSingleThreadExecutor : 创建 单线程化线程池 ; 该线程只有一个工作线程 , 可以保证所有任务按照指定的顺序执行 ; 如 FIFO 先进先出顺序 , 或 LIFO 后进先出顺序 ;
三、线程池使用示例以 AsyncTask 源代码为例 , 在 SerialExecutor 中 , 最终使用的是 THREAD_POOL_EXECUTOR.execute(mActive) 执行线程任务 ; 线程池通过 execute 函数执行外部任务 ;
THREAD_POOL_EXECUTOR 是 自己配置的线程池 , 没有使用 Java 默认提供的四种线程池 , Java 提供的四种线程池是 可缓存线程池 , 定长线程池 , 定长周期任务线程池 , 单线程线程池 ;
THREAD_POOL_EXECUTOR 线程池配置代码如下 :
new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE,
TimeUnit.SECONDS, sPoolWorkQueue, sThreadFactory,
new ThreadPoolExecutor.DiscardOldestPolicy());
下面对 THREAD_POOL_EXECUTOR 自己配置的线程池参数进行说明解析 ,
CORE_POOL_SIZE 核心线程数 ,
MAXIMUM_POOL_SIZE 最大线程数 , 非核心线程就是二者相减 ,
KEEP_ALIVE 非核心线程闲置时间 , 超过一定时间非核心线程就会回收 ,
TimeUnit.SECONDS 非核心线程闲置时间单位 “秒” ,
sPoolWorkQueue 线程池任务队列 ,
sThreadFactory 线程工厂 , 作用是用于创建线程
线程池原理说明 :
线程池线程分类 : 线程池的线程分为 核心线程 , 非核心线程 两类 ;
非核心线程闲置时间 : 非核心线程 超过一定的闲置时间 , 就会被回收 ;
假设线程池最大线程数是 8 8 8 , 核心线程数 3 3 3 , 非核心线程数 5 5 5 ;
线程池任务队列 : 当启动一个线程池后 , 线程池会不停地从该任务队列中取出任务执行 ,
-
启动核心线程 : 如果当前核心线程没有满 , 小于 3 3 3 个 , 那么创建核心线程执行该任务 ,
-
启动非核心线程 : 如果当前核心线程已经有 3 3 3 个 , 但是 非核心线程没有满 , 小于 5 5 5 个 , 那么会创建非核心线程 , 执行该任务 ;
执行者 Executor 执行任务处理 : 如果核心线程数 有 3 3 3 个 , 非核心线程数有 5 5 5 个 , 最大线程数已满 ; 如果用户再提交任务给线程池 , 就会 将任务放入线程池任务队列中排队 ; 如果此时任务队列也满了 , 此时就会 抛出异常 ; 开发者应该通过回调处理被拒绝的任务 ;
线程池从任务队列取出任务并执行 : 线程数量 C C C
- 线程数量
C
<
3
C < 3
C
关注打赏
- 【Android Gradle 插件】Gradle 自定义 Plugin 插件 ③ ( 自定义插件作用 | Android Gradle 插件的扩展 | 自定义 Extension 扩展 )
- 【Android Gradle 插件】Gradle 构建生命周期 ③ ( BuildListener 构建监听器 | TaskExecutionGraphListener 任务执行图监听器 )
- 【Android Gradle 插件】Gradle 构建生命周期 ② ( Gradle 类的添加构建生命周期监听器函数 | Gradle#addListener 函数 )
- 【Android Gradle 插件】Gradle 构建生命周期 ① ( 分析构建脚本 | 执行初始化配置 | 执行 Gradle 任务 | Project#beforeEvaluate 函数 )
- 【Android Gradle 插件】自定义 Gradle 任务 ⑨ ( 控制 Gradle 执行任务顺序 | Task#finalizedBy 函数 | 控制 Gradle 执行任务顺序示例分析 )
- 【Android Gradle 插件】自定义 Gradle 任务 ⑧ ( 控制 Gradle 执行任务顺序 | Task#shouldRunAfter 函数 | 三个函数使用场景对比 )
- 【Android Gradle 插件】自定义 Gradle 任务 ⑦ ( 控制 Gradle 执行任务顺序 | Task#dependsOn 函数 | Task#mustRunAfter 函数 )
- 【数学分析】集合 ① ( 集合概念 | 集合表示 | 常用的数集合 | 集合的表示 )
- 【数学分析】学科简介 ( 初等数学缺陷 | 微分与积分 | 学习数学分析的目的 | 数学分析与高等数学对比 )
- 【Android Gradle 插件】自定义 Gradle 任务 ③ ( Gradle 自定义任务创建方法 Project#task 函数 | Task#doFirst 函数用法 )