java - 为什么okhttp3连接池使用Int.MAX_VALUE作为maximumPoolSize?

标签 java threadpool okhttp

当执行大量请求时,会创建大量线程来维护空闲连接,这些线程处于TIMED_WAITING状态五分钟。

最新版本中存在以下源代码:

class RealBackend(threadFactory: ThreadFactory) : Backend {
  private val executor = ThreadPoolExecutor(
      0, // corePoolSize.
      Int.MAX_VALUE, // maximumPoolSize.
      60L, TimeUnit.SECONDS, // keepAliveTime.
      SynchronousQueue(),
      threadFactory
  )
}

来自okhttp/TaskRunner.kt at master · square/okhttp · GitHub

连接池源码:okhttp/ConnectionPool.kt at master · square/okhttp · GitHub

GitHub 存储库问题中的类似反馈:

为什么不使用较低的值来限制线程的峰值数量?线程数过高可能会导致问题。

最佳答案

OkHttp 限制了自己的资源使用限制,但这里没有。相反,Dispatcher 限制并发调用的数量,ConnectionPool 限制 Activity 连接的数量。

关于java - 为什么okhttp3连接池使用Int.MAX_VALUE作为maximumPoolSize?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70496944/

相关文章:

java - 如何修复我的对话框暗淡和 Alpha 效果

c - 信号量无法正常工作

java - 使用脚本运行 java jar 文件

java - 获取错误 java.lang.IllegalArgumentException : unexpected url

java - spring中如何使用一个函数保存多行数据

java - 在Java中删除Cookie/浏览器如何删除Cookie

java - 如何获取 pdf 文档 iText 7 的页面大小

c# - 始终在 Windows 服务上运行线程

android - 如何检查数据是否已经在缓存中 OkHttp

android - 你如何让 Idling 资源在 Kotlin 中与协程一起工作