java Jersey 2.1客户端线程安全吗?

jak*_*cki 33 java jersey thread-safety jersey-client jersey-2.0

针对jersey 2.0的文档说:

客户端实例是昂贵的资源.建议重新使用已配置的实例来创建Web资源.Web资源的创建,请求的构建和响应的接收都保证是线程安全的.因此,可以在多个线程之间共享Client实例和WebResource实例

客户端在2.1版中仍然是线程安全的吗?我在2.1的文档中找不到有关线程安全的信息.

小智 23

是的,Jersey 2.1客户端是线程安全的,即使在未来的Jersey版本中也应该是线程安全的.您可以从一个Client实例创建许多WebTarget,并在这些WebTargets上调用许多请求,同时在一个WebTarget实例上调用更多请求.

如果将自定义非线程安全提供程序注册到客户端或WebTaget中,则可以破坏线程安全性.例如,ClientRequestFilter不是线程安全的,无法同时处理更多请求.Jersey内置提供程序是线程安全的.某些Jersey扩展提供程序不能是线程安全的,在这种情况下,这是在提供程序的javadoc中指定的.

  • 此限制是来自JAX-RS还是仅来自Jersey?因为[`javax.ws.rs.client.Client`](https://jax-rs-spec.java.net/nonav/2.0/apidocs/javax/ws/rs/client/Client.html)仅说: _Clients是重量级对象...初始化以及客户端实例的处理可能是一个相当昂贵的操作.因此建议只构建少量的客户端实例...客户端实例必须在处理之前正确关闭以避免泄漏资源.所以没有关于**线程安全**,只有**接近重用**但在同一时间没有任何关于_. (4认同)
  • 有用的答案。您是否也有与此相关的任何资料? (2认同)
  • @lucasvc-实际上,[javax.ws.rs.client.Client](https://jax-rs-spec.java.net/nonav/2.0/apidocs/javax/ws/rs/rs/client/Client.html)没有**说**接近重用**。它说:_Client实例必须被正确关闭,然后再进行“处置”,以避免资源泄漏。_和close()方法的文档说:_一旦客户端关闭,在客户端实例上调用其他任何方法都会_导致抛出IllegalStateException。_因此关闭后无法重用。 (2认同)
  • 问题仍然存在。由于某些未知原因,删除了线程安全文档。大声笑,我希望这样的东西会被“添加”,而不是被删除?票证:https://java.net/jira/browse/JERSEY-3094 (2认同)

Eri*_*agt 1

我认为,根据2.1 发行说明,这方面没有任何变化,但我在文档中找不到这种变化的动机。