http线程池的优化

针对并发高时http连接不释放的问题,通过引入ThreadLocal为每个线程分配单独的HttpClient实例,确保线程间隔离并减少资源重复创建。同时,使用ThreadLocal管理PostMethod、GetMethod和相关缓冲区,调用完成后及时释放连接,有效提升了性能。
摘要由CSDN通过智能技术生成

我们原来用的httpClient一直都是com.ning.http.client.AsyncHttpClient(线程池管理类),需要的时候申请,不需要的时候释放。并发比较高的情况下,存在http链接不释放的问题,升级了版本也解决不了,我最近对它进行了一次重构,彻底解决了这个问题

替换的思路就是用ThreadLocal来为每一个线程分配一个HttpClient,使用后自己释放链接,这样每个线程就不用重复构造HttpClient。同时为了尽可能减少内存的申请,为在函数调用过程中申请的变量都申请了ThreadLocal变量,demo如下

 

import java.io.ByteArrayOutputStream;

import java.io.InputStream;

import java.net.URLDecoder;

 

import org.apache.commons.httpclient.HttpStatus;

import org.apache.commons.httpclient.URI;

import org.apache.commons.httpclient.methods.GetMethod;

import org.apache.commons.httpclient.methods.PostMethod;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

 

/**

* http请求工具类

*

* @author

*/

@SuppressWarnings("deprecation")

public class HttpClient {

private static

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值