okhttp关于okHttpClient.newCall(request).enqueue(callback)的问题

发布于 2022-09-05 08:28:30 字数 156 浏览 17 评论 0

okHttpClient.newCall(request).enqueue(callback)
1.这句代码每次都会开启一个新的子线程吗,还是都在同一个子线程里面
2.如果有10个请求调用10次,那第10个请求是要等前面9个都执行完毕才能执行吗
3.okhttp如何设置最大连接数

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

能怎样 2022-09-12 08:28:30

以 OkHttp3 代码为例,可以看到请求最终是由 Dispatcher 来分发的,其中有代码:

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

可以看到是有一个 executorService 也就是线程池来执行请求。线程池的构造代码如下:

new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60, TimeUnit.SECONDS,
          new SynchronousQueue<Runnable>(), Util.threadFactory("OkHttp Dispatcher", false))

可以看到最大线程数是 Integer.MAX_VALUE,并且 Keep Alive 60 秒。所以基本限制同时请求个数的参数在 Max Request 这个值上,这个值可以通过方法 Dispatcher.setMaxRequests 来设置。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文