为了完成调度和复用,定义了两个队列分别用作等待队列和执行任务的队列。这两个队列都是Dispatcher
成员变量。Dispatcher是一个控制执行,控制所有Call的分发和任务的调度、通信、清理等操作。这里只介绍异步调度任务。
-
/** Ready async calls in the order they’ll be run. */
-
private final Deque readyAsyncCalls = new ArrayDeque<>();
-
/** Running asynchronous calls. Includes canceled calls that haven’t finished yet. */
-
private final Deque runningAsyncCalls = new ArrayDeque<>();
在《okhttp连接池复用机制》文章中我们在缓存Connection连接的时候也是使用的Deque双端队列。这里同样的方式,可以方便在队列头添加元素,移除尾部的元素。
2.2 过程分析
Call
代用equeue
方法的时候
-
synchronized void enqueue(AsyncCall call) {
-
if (r