Java AsyncInvoker未释放线程
我使用的是Java AsyncInvoker未释放线程,java,multithreading,jax-rs,jersey-2.0,jersey-client,Java,Multithreading,Jax Rs,Jersey 2.0,Jersey Client,我使用的是AsyncInvoker和Jersey 2.0。这对我来说很好。然而,线程并没有在返回完成后结束。请注意,我不希望我呼叫的服务有任何响应 public Future<Response> fire(WebTarget webTarget) { Future<Response> response = null; try { response = webTarget.request(MediaType.APPLICATION_JSON
AsyncInvoker
和Jersey 2.0。这对我来说很好。然而,线程并没有在返回完成后结束。请注意,我不希望我呼叫的服务有任何响应
public Future<Response> fire(WebTarget webTarget) {
Future<Response> response = null;
try {
response = webTarget.request(MediaType.APPLICATION_JSON_TYPE)
.accept(MediaType.APPLICATION_JSON_TYPE)
.headers(headers)
.async().get();
}
catch (Exception e) {
e.printStackTrace();
}
return response;
}
公共未来火灾(WebTarget WebTarget){
未来响应=空;
试一试{
response=webTarget.request(MediaType.APPLICATION\u JSON\u类型)
.accept(MediaType.APPLICATION\u JSON\u类型)
.标题(标题)
.async().get();
}
捕获(例外e){
e、 printStackTrace();
}
返回响应;
}
只要您不使用提供给您的实际javax.ws.rs.core.Response
执行任何操作,在未来值解析后,请求-响应流将保持打开状态(我猜与之关联的线程也将是原始HTTP请求)。你应该:
javax.ws.rs.core.Response
对象执行一些操作并关闭它(或它的流)MyPojo
实例您需要关闭在调用方法中创建的
客户端
对象。在调用方法中,您将有如下内容-
Client client = ClientBuilder.newClient();
WebTarget webTarget = client.target(SERVER_URL).path(API_PATH).path(String.valueOf(id));
fire(webTarget);
public void fire(WebTarget webTarget) {
try {
webTarget.request(MediaType.APPLICATION_JSON_TYPE)
.accept(MediaType.APPLICATION_JSON_TYPE)
.headers(headers)
.async().get(new InvocationCallback<Response>() {
@Override
public void completed(Response response) {
// Do whatever your wish with response
client.close();
}
@Override
public void failed(Throwable throwable) {
throwable.printStackTrace();
client.close();
}
});
}
catch (Exception e) {
e.printStackTrace();
}
}
因此,在调用此方法后,您需要关闭客户端
-
client.close()
但是,建议在收到响应后关闭客户机。像下面这样-
Client client = ClientBuilder.newClient();
WebTarget webTarget = client.target(SERVER_URL).path(API_PATH).path(String.valueOf(id));
fire(webTarget);
public void fire(WebTarget webTarget) {
try {
webTarget.request(MediaType.APPLICATION_JSON_TYPE)
.accept(MediaType.APPLICATION_JSON_TYPE)
.headers(headers)
.async().get(new InvocationCallback<Response>() {
@Override
public void completed(Response response) {
// Do whatever your wish with response
client.close();
}
@Override
public void failed(Throwable throwable) {
throwable.printStackTrace();
client.close();
}
});
}
catch (Exception e) {
e.printStackTrace();
}
}
public void fire(WebTarget-WebTarget){
试一试{
webTarget.request(MediaType.APPLICATION\u JSON\u类型)
.accept(MediaType.APPLICATION\u JSON\u类型)
.标题(标题)
.async().get(新调用回调()){
@凌驾
已完成公共作废(响应){
//随你的意愿去做,并做出回应
client.close();
}
@凌驾
公共作废失败(可丢弃可丢弃){
printStackTrace();
client.close();
}
});
}
捕获(例外e){
e、 printStackTrace();
}
}
任何解决方案技术人员!!!