改造2队列等待大小

时间:2018-08-30 06:02:01

标签: android retrofit retrofit2

我是Retrofit 2库的新手,我想知道:可以容纳等待队列的最大呼叫数量是多少?

它是否使用PriorityBlockingQueue这是一个自增长队列?

1 个答案:

答案 0 :(得分:1)

这个问题使我想深入研究Retrofit源代码。这是我的结果,这可能不正确,但我想分享。如果找到更好的答案,请纠正我!

该代码包含okhttp3.Dispatcher类的maxRequests信息,并且它们使用Deque而不是PriorityBlockingQueue

public final class Dispatcher {
    private int maxRequests = 64;
    private int maxRequestsPerHost = 5;
    ....

如文档所述:

  

每个调度程序都使用ExecutorService在内部运行调用。如果您提供自己的执行器,则它应该能够同时运行{@linkplain #getMaxRequests the configured maximum}个调用。

这意味着并发调用的最大数量取决于您执行的操作:

编辑:

有关您问题的更多信息 可以容纳等待队列的最大呼叫数量是多少? ,您可以在Dispatcher中看到此功能代码课:

synchronized void enqueue(AsyncCall call) {
    if (runningAsyncCalls.size() < maxRequests && runningCallsForHost(call) < maxRequestsPerHost) {
      runningAsyncCalls.add(call);
      executorService().execute(call);
    } else {
      readyAsyncCalls.add(call);
    }
  }

如果达到runningAsyncCalls个队列大小maxRequests(并发请求),则新的call将被添加到readyAsyncCalls,并且此queue没有限制大小,这意味着最大通话价值将为 Integer.MAX_VALUE