Недавно я обнаружил, что использование этого подхода может привести к у пользователя открыто слишком много портов, и большинство соединений находятся в состоянии TIME_WAIT.
http://www.opensubscriber.com/message/c ... ttpclient- dev@jakarta.apache.org/86045.html
Следовательно, вместо каждого потока выполняется:
Код: Выделить всё
HttpClient c = new HttpClient();
try {
c.executeMethod(method);
}
catch(...) {
}
finally {
method.releaseConnection();
}
[МЕТОД А]
Код: Выделить всё
// global_c is initialized once through
// HttpClient global_c = new HttpClient(new MultiThreadedHttpConnectionManager());
try {
global_c.executeMethod(method);
}
catch(...) {
}
finally {
method.releaseConnection();
}
Если 10 потоков используют global_c, остальные 40 потоков будут заблокированы?
Или было бы лучше если в каждом потоке я создаю экземпляр HttpClient, но явно освобождаю диспетчер соединений?
[МЕТОД B]
Код: Выделить всё
MultiThreadedHttpConnectionManager connman = new MultiThreadedHttpConnectionManager();
HttpClient c = new HttpClient(connman);
try {
c.executeMethod(method);
}
catch(...) {
}
finally {
method.releaseConnection();
connman.shutdown();
}
Могу ли я узнать, какой метод (A или B)? лучше для приложения, использующего потоки 50++?
Подробнее здесь: https://stackoverflow.com/questions/128 ... nvironment