1 概述
1.1 引言
android
完成非阻塞式的异步请求的时候都是通过启动子线程的方式来解决,子线程执行完任务的之后通过handler
的方式来和主线程来完成通信。无限制的创建线程,会给系统带来大量的开销。如果在高并发的任务下,启用个线程池,可以不断的复用里面不再使用和有效的管理线程的调度和数量的管理。就可以节省系统的成本,有效的提高执行效率。
1.2 线程池ThreadPoolExecutor
ThreadPoolExecutor
是java线程创建工具。存在于java.util.concurrent
包中。
看构造方法:
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue) {
this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
Executors.defaultThreadFactory(), defaultHandler);
}
- corePoolSize : 最小并发线程数。
- maximumPoolSize :线程池中最大的线程池并发数。
- keepAliveTime : 当线程的数目大于corePoolSize时,线程的最大存活时间。
- unit : 时间单位
- BlockingQueue 工作队列
okhttp的线程池对象存在于Dispatcher类中。实例过程如下
public synchronized ExecutorService executorService() {
if (executorService == null) {
executorService = new ThreadPoolExecutor(0, Integer.MAX_VALUE,