关于Android线程池
2018-09-12 本文已影响14人
Aron1001
-
前言
一般而言,我们在android程序代码中不要显式的创建线程,而是要采取线程池(也就是ThreadPoolExecutor类)的方式创建。 -
关于线程池的几个类
直接上图
图片.png
ThreadPoolExecutor的构造方法如下:
图片.png
1,corePoolSize:核心线程数
线程池新建线程的时候,如果当前线程总数小于 corePoolSize ,则新建的是核心线程;如果超过corePoolSize,则新建的是非核心线程。
2,maximumPoolSize:线程总数= 核心线程数 + 非核心线程数
3,keepAliveTime:超时时长
非核心线程如果长时间闲置,超过这个时长便被回收
4,unit
设置keepAliveTime的单位,MILLISECONDS : 毫秒 、SECONDS : 秒、MINUTES : 分、HOURS : 小时、DAYS : 天
5,workQueue:缓冲任务队列
线程池的execute方法会将Runnable对象存储起来,当所有的核心线程都有活干,新添加的任务会被添加到这个队列中等待处理,如果队列满了,则新建非核心线程执行任务。
6,threadFactory:线程工厂接口
只有一个new Thread(Runnable r)方法,可以认为是线程池创建新线程 。
7,handler:
这个主要是用来抛异常的,如果线程无法执行新任务一般会抛一个RejectedExecutionException异常。
另外,为了使用方便,java提供了四种线程池:- newFixedThreadPool :定长线程池
- newCacheThreadPool:缓存线程池
- newScheduledThreadPool:定长任务线程池
- newSingleThreadExecutor :创建一个单线程的线程池
-
简单实例
图片.png