OkHttp(二):线程重用机制

OkHttp(一):线程重用机制

1、线程重用机制代码在Dispatcher类中;上一篇中我们了解到异步调用enqueue方法内部会调用executorService().execute(call)方法;executorService()就是实际的线程池的创建管理,用的是懒加载模式;实际是利用的ThreadPoolExecutor线程池来管理;


线程池创建

参数一:核心线程数--0;代表常驻线程为0

参数二:最大线程数

参数三:60s超时清理;代表任务处理完毕60s后如果还是没有任务,将清除运行中的线程,直到运行中的线程数和核心线程数相等

参数五:同步队列

2、经过上一篇我们直到,异步的Call实际会创建一个AsyncCall对象;内部执行的代码如下:在最后都会调用finished函数,用于通知dispatcher该任务执行完了;


调用代码

3、我们来看finished函数;

    三个重载方法,最终调用最后一个;

    a、将完毕的任务从runningAsyncCalls中移除,然后promoteCalls方法用于遍历readyAsyncCalls队列中符合条件的Call任务添加到线程池中处理;

finished函数


promoteCalls函数

4、综上所述,OkHttp内部的线程池实际是用ThreadPoolExecutor来管理线程的;每次任务执行完毕会告知dispatcher及时的将新的任务给线程池,否则60s后线程池的线程将会停止并清掉;以此来实现线程重用机制的

你可能感兴趣的:(OkHttp(二):线程重用机制)