在我们现有的代码库中,由于JAX-RX Client API document:
客户端是管理客户端通信基础结构的重量级对象。初始化和处置Client实例可能是一个相当昂贵的操作。因此,建议在应用程序中仅构造少量的Client实例。
javax.ws.rs.client.Client
用作资源内的单例。代码如下:
@Path("test")
public class TestResource {
private Client client = ClientUtil.getInstance();//Get the singleton Client instance
@PUT
@Produces("application/json")
public String update(@Context UriInfo uri,
@Context HttpHeaders headers) {
...client is used for sending request to some other service
}
}
问题:: TestSource
不是由单个用户而是多个用户使用的,并且每个用户都使用自己的凭据,这意味着每个用户都有自己的配置。在任何情况下都必须调用以下方法链:
client.getTarget()
.request()
.header(HttpHeaders.AUTHORIZATION, "authorization header value")
....
=>并发问题
问题1:代码中的javax.ws.rs.client.Client实例是线程安全的吗?**问题2:如果不是线程安全的,如何解决线程安全问题?我是否应该同步此Singleton Client实例?还是尝试使每个用户拥有自己的Client实例并将其维护在线程安全的集合中?还是有更好的替代解决方案?