SimpleHttpConnectionManager被错误地使用了。

10

SimpleHttpConnectionManager被错误使用。请确保总是调用HttpMethod.releaseConnection(),并且每次只有一个线程和/或方法在使用此连接管理器。

有人知道为什么会出现这个错误,并导致我要下载的文件失败、重试或下载不完整吗?

谢谢!


4
更多的代码或异常跟踪信息会帮助我们更好地理解您的问题。 - Alexander Pogrebnyak
2个回答

16

确保不要使用SimpleHttpConnectionManager在多个线程中创建和使用连接,简单的连接管理器并不适用于此场景-它总是返回相同的连接,且不满足线程安全性。

在多线程环境中,使用一个使用连接池的不同管理器。请参见MultiThreadedHttpConnectionManager


1
谢谢。 代码为它提供了一个默认的httpclient,其中包含一个默认的simplehttpconnection,所以我进行了更改,并强制它使用multithreadedhhttpconnectionmanager。 - MArio

10

我不想为此负责,但是根据Eyal Schneider的回答,可以在Vincent de Villers博客中找到关于使用MultiThreadedHttpConnectionManager的更多信息。

如果链接消失,以下代码片段供参考:

HttpClient httpclient = new HttpClient(new MultiThreadedHttpConnectionManager());
GetMethod httpget = new GetMethod("http://www.myhost.com/");
try {
    httpclient.executeMethod(httpget);
    Reader reader = new InputStreamReader(
        httpget.getResponseBodyAsStream(), httpget.getResponseCharSet());
    // consume the response entity
} finally {
    httpget.releaseConnection();
}

非常感谢这个。 - Francesco Rigoni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接