- executorService = , Integer.MAX_VALUE, , TimeUnit.SECONDS,
- new SynchronousQueue(), Util.threadFactory(“OkHttp Dispatcher”, false));
- }
- return executorService;
- }
1.2 Call对象
了解源码或使用过`okhttp`的都知道。 `okttp`的操作元是Call对象。异步的实现是`RealCall.AsyncCall`。而 `AsyncCall`是实现的一个`Runnable`接口。
- final class AsyncCall extends NamedRunnable {}
所以Call本质就是一个`Runable`线程操作元肯定是放进excutorService中直接启动的。
**2 线程池的复用和管理**
2.1 图解
为了完成调度和复用,定义了两个队列分别用作等待队列和执行任务的队列。这两个队列都是`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. */
-
priv