Лучшая практика использования Apache HttpClient в многопоточной среде ⇐ JAVA

Программисты JAVA общаются здесь
Anonymous
Лучшая практика использования Apache HttpClient в многопоточной среде

Сообщение Anonymous »

Некоторое время я использую HttpClient в многопоточной среде. Для каждого потока, когда он инициирует соединение, он создает совершенно новый экземпляр HttpClient.

Недавно я обнаружил, что использование этого подхода может привести к у пользователя открыто слишком много портов, и большинство соединений находятся в состоянии 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();
}
В обычной ситуации к global_c будут обращаться одновременно 50++ потоков. Мне было интересно, создаст ли это какие-либо проблемы с производительностью? Использует ли MultiThreadedHttpConnectionManager механизм без блокировки для реализации своей политики потокобезопасности?

Если 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();
}
Будут ли у connman.shutdown() проблемы с производительностью?

Могу ли я узнать, какой метод (A или B)? лучше для приложения, использующего потоки 50++?

Подробнее здесь: https://stackoverflow.com/questions/128 ... nvironment

Вернуться в «JAVA»