String URL_A ="http://www.google.com/";
BasicHttpClientConnectionManager connManager =new BasicHttpClientConnectionManager();
HttpClientBuilder httpBuilder = HttpClients.custom();
httpBuilder.setConnectionManager(connManager);
HttpClient httpClient = httpBuilder.build();
//First Execution
HttpGet httpGet = new HttpGet(URL_A);
HttpResponse httpResponse = httpClient.execute(httpGet);
EntityUtils.consume(httpResponse.getEntity());
//Second Execution
HttpGet httpGet2 = new HttpGet(URL_A);
HttpResponse httpResponse2 = httpClient.execute(httpGet2);
EntityUtils.consume(httpResponse2.getEntity());
//二次执行重用//第一次执行中建立了连接吗?
答案 0 :(得分:1)
对于相同的URL,事实证明它重复使用了Connection。根据从BasicHttpClientConnectionManager提取的代码
中指定的synchronized HttpClientConnection getConnection(final HttpRoute route, final Object state) {
Asserts.check(!this.isShutdown.get(), "Connection manager has been shut down");
if (this.log.isDebugEnabled()) {
this.log.debug("Get connection for route " + route);
}
Asserts.check(!this.leased, "Connection is still allocated");
if(!LangUtils.equals(this.route,route)|| !LangUtils.equals(this.state,state)){ closeConnection(); }
this.route = route;
this.state = state;
checkExpiry();
if (this.conn == null) {
this.conn = this.connFactory.create(route, this.connConfig);
}
this.conn.setSocketTimeout(this.socketConfig.getSoTimeout());
this.leased = true;
return this.conn;
}