Android中常见的线程池

日常开发中我们常常使用到线程池,其能有效管理线程资源,避免过多线程导致系统资源浪费、又能复用线程资源,避免频繁的创建/销毁线程。在Android中线程池的实现为ThreadPoolExecutor类,本文主要记录该类相关的知识点。

线程池的六大参数

corePoolSize

该参数描述核心线程的数量,线程池中分为核心线程和非核心线程,其本质都是线程,但是核心线程在空闲时一般不会被回收,除非设置了allowCoreThreadTimeOut=true.而非核心线程在空闲后会被回收(回收时间受keepAliveTime参数控制)。

maximumPoolSize

该参数描述非核心线程的数量

keepAliveTime

该参数描述空闲线程的存活时间,一个线程(常常是非核心线程)空闲keepAliveTime时间后,会被回收调。

unit

该参数是描述keepAliveTime存活时间的单位,常见的有毫秒和秒

workQueue

该参数是存储任务的队列,通过execute方法递交的runnable会存储在该参数中

threadFactory

该参数是用来创建线程的工厂类,当线程池中需要新建线程时,会调用该参数的newThread方法创建线程

执行流程

线程池的执行流程中主要涉及到上述到六个参数。当调用execute方法添加一个runnable时,流程如下

  1. 如果当前存活的线程数小于corePoolSize,调用thread的newThread新建核心线程执行任务
  2. 如果当前线程数大于等于corePoolSize,则将该任务添加到对应的workQueue队列中,如果添加成功,则等待执行,否则进行第三步
  3. 如果存活线程数小于最大线程数,则新建非核心线程执行该任务,如果存活线程已达到最大线程数,则调用RejectExecutionHandler的rejectExecution方法通知调用者。

常见线程池

线程池分类关键参数适用场景
FixedThreadPoolcoreSize=size maximumPoolSize=size快速响应的任务,因为其核心线程不会被回收
CacheThreadPoolcoreSize=0 maximumPoolSize=Integer.MAX大量的、耗时短的任务
ScheduledThreadPoolcoreSize=size maximumPoolSize=Integer.MAX定时任务或固定周期任务
SingleThreadPoolcoreSize=1 maximumPoolSize=1单线程执行所有任务
  • 22
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值