我们原来用的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