我有一些代码:
public class Foo {
private HttpClient httpClient;
public Foo() {
httpClient = new DefaultHttpClient();
}
}
在与同事(经验水平高于我自己)聊天的过程中,我担心如果我创建多个foo(),他们的httpClient可能会受到一个httpClient操作的影响。我们特别关注的是Cookies。
如果我的代码如下:
public class Bar {
public static void main(String[] args) {
Foo a = new Foo();
Foo b = new Foo();
a.executeHttpStuff();
}
}
...并且executeHttpStuff()使用了httpClient,并且添加了cookie,这些cookie是否会出现在b上的任何调用中?
我的预感是'不'。
我的同事的预感是“可能”。
JavaDoc并不是非常有说服力。
你们中的任何人都知道吗?
答案 0 :(得分:2)
根据以下文档页面:
http://hc.apache.org/httpclient-3.x/performance.html
“当与线程安全的连接管理器(如MultiThreadedHttpConnectionManager)一起使用时,HttpClient是完全线程安全的”
javadoc位于:
答案 1 :(得分:2)
HttpClient不会在实例之间共享cookie(通过静态)。 所以你的预感是正确的。
您可以自己尝试,嗅探来自两个不同客户端实例的流量到同一服务器(通过tcpmon,例如。)。
答案 2 :(得分:1)
答案是否定的。除了你照顾并有一个CookieStore。 请参阅:https://hc.apache.org/httpcomponents-client-ga/tutorial/html/statemgmt.html
玩得开心。