Les meilleures Pratiques à Utiliser HttpClient en Environnement Multithread

Pendant un certain temps, j'ai été en utilisant HttpClient dans un environnement multithread. Pour chaque thread, lorsqu'il établit une connexion, il va créer un tout nouveau HttpClient instance.

Récemment, j'ai découvert que, en utilisant cette approche, il peut causer à l'utilisateur d'avoir un trop grand nombre de ports qui sont ouverts et la plupart des connexions sont en état TIME_WAIT.

http://www.opensubscriber.com/message/[email protected]/86045.html

Ainsi, au lieu de chaque thread en train de faire :

HttpClient c = new HttpClient();
try {
    c.executeMethod(method);
}
catch(...) {
}
finally {
    method.releaseConnection();
}

Nous avons prévu :

MÉTHODE[A]

//global_c is initialized once through
//HttpClient global_c = new HttpClient(new MultiThreadedHttpConnectionManager());

try {
    global_c.executeMethod(method);
}
catch(...) {
}
finally {
    method.releaseConnection();
}

Dans une situation normale, global_c sera accessible par 50++ threads simultanément. Je me demandais, ça va créer des problèmes de performances? Est MultiThreadedHttpConnectionManager à l'aide d'un lock-free mécanisme de mise en œuvre de son thread-safe de la politique?

Si 10 threads à l'aide de global_c, les autres 40 threads être verrouillé?

Ou serait-ce mieux si, dans chaque thread, j'ai créer une instance d'un HttpClient, mais relâchez le gestionnaire de connexion de façon explicite?

MÉTHODE[B]

MultiThreadedHttpConnectionManager connman = new MultiThreadedHttpConnectionManager();
HttpClient c = new HttpClient(connman);
try {
      c.executeMethod(method);
}
catch(...) {
}
finally {
    method.releaseConnection();
    connman.shutdown();
}

Sera connman.shutdown() souffrent de problèmes de performance?

Pourrais-je savoir quelle méthode (A ou B) est préférable, pour des applications à l'aide d'un 50++ fils?