OkHttp3源码详解之Okhttp任务队列工作原理(三),阿里架构师经验分享

本文深入探讨了OkHttp3的Dispatcher类中任务队列的工作原理,包括如何管理同步和异步调用,以及如何控制并发请求的数量。通过源码分析,展示了如何在达到最大请求限制时将请求放入等待队列,并在资源可用时执行。此外,还介绍了在执行过程中如何处理回调和错误情况。
摘要由CSDN通过智能技术生成
  1. executorService = , Integer.MAX_VALUE, , TimeUnit.SECONDS,
  2. new SynchronousQueue(), Util.threadFactory(“OkHttp Dispatcher”, false));
  3. }
  4. return executorService;
  5. }

1.2 Call对象

了解源码或使用过`okhttp`的都知道。 `okttp`的操作元是Call对象。异步的实现是`RealCall.AsyncCall`。而 `AsyncCall`是实现的一个`Runnable`接口。

  1. final class AsyncCall extends NamedRunnable {}
所以Call本质就是一个`Runable`线程操作元肯定是放进excutorService中直接启动的。

**2 线程池的复用和管理**

2.1 图解

为了完成调度和复用,定义了两个队列分别用作等待队列和执行任务的队列。这两个队列都是`Dispatcher` 成员变量。Dispatcher是一个控制执行,控制所有Call的分发和任务的调度、通信、清理等操作。这里只介绍异步调度任务。

  1. /** Ready async calls in the order they’ll be run. */

  2. private final Deque readyAsyncCalls = new ArrayDeque<>();

  3. /** Running asynchronous calls. Includes canceled calls that haven’t finished yet. */

  4. priv

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值