`
suichangkele
  • 浏览: 200466 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HttpClient解读(4)-验证释放连接的操作

    博客分类:
  • http
阅读更多

dd

为了验证之前关闭连接的操作,写了如下代码:

public static void main(String[] args) throws IOException, InterruptedException {
	
	PoolingHttpClientConnectionManager manager = new PoolingHttpClientConnectionManager(100000L, TimeUnit.SECONDS);//指定一个连接的生存时间最大为100秒。
	manager.setDefaultMaxPerRoute(1);//指定一个router缓存的最大的连接数为1
	
	RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(10000)/*从连接池中取连接的超时时间。*/.setConnectTimeout(3000)/*建立连接的*/
			.setSocketTimeout(5000)/*包的最大间隔时间*/.build();
	
	HttpClientBuilder create = HttpClientBuilder.create();
	create.setConnectionManager(manager);
	create.setDefaultRequestConfig(requestConfig);
        create.evictExpiredConnections();//关闭失效的连接
	create.evictIdleConnections(1000*60L*3, TimeUnit.MILLISECONDS);//关闭长时间不用的连接
	
	final CloseableHttpClient httpClient = create.build();
		
	final HttpGet httpGet1 = new HttpGet("http://www.baidu.com");
	Thread t1 = new Thread(new Runnable() {//新线程进行连接,使用第一个连接,
		
		@Override
		public void run() {
			
			try {
				CloseableHttpResponse execute = httpClient.execute(httpGet1);
				StatusLine statusLine = execute.getStatusLine();
				int statusCode = statusLine.getStatusCode();
				if(statusCode == HttpStatus.SC_OK) {
					System.out.println("第一个请求成功,sleeep 3秒");
					Thread.sleep(3000L);
					System.out.println("第一个请求醒来");
//					EntityUtils.consume(execute.getEntity());//这是一个开关,第一次不注释,第二次注释掉
				} else {//不是200,关闭连接
					execute.close();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	});
	t1.start();//启动第一个线程
	
	Thread.sleep(1000L);//睡眠1秒,保证第一个线程优先使用开辟的连接	
	
	final HttpGet httpGet2 = new HttpGet("http://www.baidu.com");
	CloseableHttpResponse execute = httpClient.execute(httpGet2);
	StatusLine statusLine = execute.getStatusLine();
	int statusCode = statusLine.getStatusCode();
	if(statusCode == HttpStatus.SC_OK) {
		System.out.println("第二个请求成功,sleeep 3秒");
		EntityUtils.consume(execute.getEntity());
	} else {//不是200,关闭连接
		execute.close();
	}
	
	httpClient.close();
		
}

 

 试验发现,当不注释掉那个EntityUtils.consume的时候是不会出现超时错误的,当注释掉之后就会出现Timeout waiting for connection from pool错误,所以可以确定,使用EntityUtils.consume的确是可以将连接还回连接池。

分享到:
评论

相关推荐

    httpclient-4.5.6-API文档-中文版.zip

    赠送jar包:httpclient-4.5.6.jar; 赠送原API文档:httpclient-4.5.6-javadoc.jar; 赠送源代码:httpclient-4.5.6-sources.jar; 赠送Maven依赖信息文件:httpclient-4.5.6.pom; 包含翻译后的API文档:httpclient...

    httpcore-4.2.4,httpclient-4.2.5,httpclient-cache-4.2.5,httpmime-4.2.5的jar包下载

    这里提到的四个jar包——httpcore-4.2.4,httpclient-4.2.5,httpclient-cache-4.2.5,httpmime-4.2.5,都是Apache HttpClient库的不同组件,用于支持HTTP通信和相关功能。 **httpcore-4.2.4.jar** 是HTTP Core模块...

    httpclient-4.5.13-API文档-中文版.zip

    赠送jar包:httpclient-4.5.13.jar; 赠送原API文档:httpclient-4.5.13-javadoc.jar; 赠送源代码:httpclient-4.5.13-sources.jar; 赠送Maven依赖信息文件:httpclient-4.5.13.pom; 包含翻译后的API文档:...

    httpclient-4.1-alpha1.jar

    httpclient-4.1-alpha1.jar httpclient-4.1-alpha1.jar httpclient-4.1-alpha1.jar httpclient-4.1-alpha1.jar httpclient-4.1-alpha1.jar

    httpclient-4.5.6-API文档-中英对照版.zip

    赠送jar包:httpclient-4.5.6.jar; 赠送原API文档:httpclient-4.5.6-javadoc.jar; 赠送源代码:httpclient-4.5.6-sources.jar; 赠送Maven依赖信息文件:httpclient-4.5.6.pom; 包含翻译后的API文档:httpclient...

    httpclient-4.4.1-API文档-中文版.zip

    赠送jar包:httpclient-4.4.1.jar; 赠送原API文档:httpclient-4.4.1-javadoc.jar; 赠送源代码:httpclient-4.4.1-sources.jar; 赠送Maven依赖信息文件:httpclient-4.4.1.pom; 包含翻译后的API文档:httpclient...

    httpclient-4.5.12-API文档-中英对照版.zip

    赠送jar包:httpclient-4.5.12.jar; 赠送原API文档:httpclient-4.5.12-javadoc.jar; 赠送源代码:httpclient-4.5.12-sources.jar; 赠送Maven依赖信息文件:httpclient-4.5.12.pom; 包含翻译后的API文档:...

    httpclient-4.5.13-API文档-中英对照版.zip

    赠送jar包:httpclient-4.5.13.jar; 赠送原API文档:httpclient-4.5.13-javadoc.jar; 赠送源代码:httpclient-4.5.13-sources.jar; 赠送Maven依赖信息文件:httpclient-4.5.13.pom; 包含翻译后的API文档:...

    httpclient-cache-4.5.jar

    用于http请求的jar包

    httpclient-4.5.5-API文档-中文版.zip

    赠送jar包:httpclient-4.5.5.jar; 赠送原API文档:httpclient-4.5.5-javadoc.jar; 赠送源代码:httpclient-4.5.5-sources.jar; 包含翻译后的API文档:httpclient-4.5.5-javadoc-API文档-中文(简体)版.zip ...

    httpclient-4.5.10-API文档-中文版.zip

    赠送jar包:httpclient-4.5.10.jar; 赠送原API文档:httpclient-4.5.10-javadoc.jar; 赠送源代码:httpclient-4.5.10-sources.jar; 赠送Maven依赖信息文件:httpclient-4.5.10.pom; 包含翻译后的API文档:...

    commons-httpclient-3.0-rc4.rar

    《Apache Commons HttpClient 3.0-rc4:深入解析与应用》 Apache Commons HttpClient 是一个广泛使用的Java库,专门用于实现HTTP客户端的功能。这个库在3.0-rc4版本中提供了许多改进和优化,使其成为开发人员进行...

    httpclient-4.5.2-API文档-中英对照版.zip

    赠送jar包:httpclient-4.5.2.jar; 赠送原API文档:httpclient-4.5.2-javadoc.jar; 赠送源代码:httpclient-4.5.2-sources.jar; 包含翻译后的API文档:httpclient-4.5.2-javadoc-API文档-中文(简体)-英语-对照...

    httpclient-4.5jar

    httpclient-4.5所需jar包,里面包含httpclient-...4.httpclient-4.5.jar 5.httpclient-cache-4.5.jar 6.httpclient-win-4.5.jar 7.httpcore-4.4.1.jar 8.httpmime-4.5.jar 9.jna-4.1.0.jar 10.jna-platform-4.1.0.jar

    httpclient-4.3-beta1

    httpclient-4.3-beta1

    httpclient-4.4-API文档-中文版.zip

    赠送jar包:httpclient-4.4.jar; 赠送原API文档:httpclient-4.4-javadoc.jar; 赠送源代码:httpclient-4.4-sources.jar; 赠送Maven依赖信息文件:httpclient-4.4.pom; 包含翻译后的API文档:httpclient-4.4-...

    httpclient-4.2.5-API文档-中文版.zip

    赠送jar包:httpclient-4.2.5.jar; 赠送原API文档:httpclient-4.2.5-javadoc.jar; 赠送源代码:httpclient-4.2.5-sources.jar; 赠送Maven依赖信息文件:httpclient-4.2.5.pom; 包含翻译后的API文档:httpclient...

    httpclient-4.5.13-sources.jar

    httpclient-4.5.13-sources.jar

    commons-httpclient-3.1-rc1.jar ,commons-logging.jar

    在项目中集成HttpClient,通常需要将`commons-httpclient-3.1-rc1.jar`添加到项目的类路径中,然后通过创建HttpClient实例,设置必要的配置,并调用相关方法发起HTTP请求。 接下来是`commons-logging.jar`,它是...

    httpclient-4.5.2-API文档-中文版.zip

    赠送jar包:httpclient-4.5.2.jar; 赠送原API文档:httpclient-4.5.2-javadoc.jar; 赠送源代码:httpclient-4.5.2-sources.jar; 包含翻译后的API文档:httpclient-4.5.2-javadoc-API文档-中文(简体)版.zip ...

Global site tag (gtag.js) - Google Analytics