我在Java应用程序中使用ThreadSafeClientConnManager
进行多线程处理。我的ThreadSafeClientConnManager
对象是静态的,因此它一直保留到应用程序运行为止。
如果我从不调用closeExpiredConnections()
或closeIdleConnections()
,会发生什么?
从长远来看,它会使我的应用程序崩溃吗?
最佳答案
以下假设您使用httpcmponents-client 4.1.2(即当前的GA)。
从代码和javadocs来看,不会发生任何不好的情况。 ThreadSafeClientConnManager具有合理的限制。如果您没有向上更改限制,则最终池将填满并且旧连接将被踢出。
不利的一面是,您将保持闲置且已过期的连接,该连接保留了不需要的资源(文件句柄)和对象。但是同样,如果您没有更改默认值,则与可用资源相比,这些资源的数量很少:Linux系统上总共有1000个文件句柄,其中有20个文件句柄。
简而言之:这不会使应用程序崩溃。
PS这些库都有可用的源,您应该自己看看会带来什么后果。