java - 如果我从不使用 ThreadSafeClientConnManager 调用 closeExpiredConnections 会发生什么

标签 java multithreading httpclient

我正在使用 ThreadSafeClientConnManager 在 Java 应用程序中进行多线程处理。我的 ThreadSafeClientConnManager 对象是静态的,因此它会一直保留到应用程序运行为止。

如果我从不调用 closeExpiredConnections()closeIdleConnections() 会发生什么?

从长远来看,它会使我的应用程序崩溃吗?

最佳答案

以下假设您使用当前 GA 版本的 httpcmponents-client 4.1.2。

从代码和 javadoc 来看,不会发生任何坏事。 ThreadSafeClientConnManager 有合理的限制。如果您没有向上更改限制,最终池将填满并且旧连接将被踢出。

不利的一面是您持有空闲和过期的连接,这些连接持有不需要的资源(文件句柄)和对象。但是同样,如果您没有更改默认值,这些资源的数量与可用资源相比是很小的:在 Linux 系统上总共有 1000 个可用的文件句柄中有 20 个。

简而言之:这不会使应用程序崩溃。

PS 这些库有可用的源代码,你应该自己看看会有什么后果。

关于java - 如果我从不使用 ThreadSafeClientConnManager 调用 closeExpiredConnections 会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8943617/

相关文章:

java - 如何使用 JAVA PKCS11 IAIK 在 SOFTHSM2 中进行 key 包装期间切换到 CKM_AES_KEY_WRAP_PAD

java - MongoDB,2 个查询的公共(public)部分

java - 为什么当操作系统代表时java会承担线程切换的开销

c - 树莓派上的 SDL 1.2 出现奇怪的线程死锁

java - Java中不循环地迭代某个目录中的文件

java - Java 8 Streams 中的并行性和平面图

java - 同时处理多个常量套接字连接

android - 在 Android 上处理 HttpClient 的最佳方式是什么?

android - 如何在 MultipartEntity 中传递字符串变量?

使用自定义 keystore .jks 文件和密码的 SSL 连接并将请求发送到 URL