【发布时间】:2012-08-11 03:24:41
【问题描述】:
与这个问题密切相关:How to use HttpClient with multithreaded operation?,我想知道 apache HttpAsyncClient 是否是线程安全的,或者它是否也需要使用 MultiThreadedHttpConnectionManager 或 ThreadSafeClientConnManager。
如果确实需要这样的连接管理器,异步库中是否存在?
我能够在异步库中找到 PoolingClientAsyncConnectionManager,但我不确定这是否是我需要的。
另外,我正在考虑使用 ThreadLocal 为每个线程创建一个 HttpAsyncClient 对象。
请注意,与我之前提到的问题不同,我需要跨会话的状态独立,即使多个会话访问同一个域也是如此。如果在会话 1 中设置了 cookie,则该 cookie 不对会话 2 可见。出于这个原因,我还考虑为每个请求创建一个全新的 HttpAsyncClient 对象,尽管我得到了印象应该有更好的方法。
谢谢。
【问题讨论】:
-
越想越觉得 ThreadLocal 行不通。使用 HttpClient,execute 方法是阻塞的,但使用 HttpAsyncClient,execute 方法是非阻塞的,因此单个线程可能会多次调用 execute,这可能会导致与多个线程在同一个 HttpClient 对象上调用 execute 相同的干扰。
标签: java multithreading apache-httpclient-4.x