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后线程池的线程将会停止并清掉;以此来实现线程重用机制的
网友评论