前提:httpclient发送请求,服务器响应码为409,这种情况下httpclient的连接状态为close_wait,且不能被重置复用,但是这个连接占用连接池中一个数,如果这种连接越来越多导致连接池占满没有可用资源。
网上有好多解决方案。
1、增大httppool的连接数
2、当占满时关闭所有连接
上述都不能解决根本。
根本原因就是,当一个连接僵死,需要httpclient手动释放连接。
对于HttpEntityEnclosingRequestBase来说,client每次请求都会生成他的一个子类。
例如:class HttpPost extends HttpEntityEnclosingRequestBase{}
HttpPost httpPost = new HttpPost ();
对应的 httpPost .abort()就是关闭这个连接,而并非关闭整个连接池或者client。
理论上说如果服务器响应码为非200段的,那么连接需要我们客户端手动断开。