【问题标题】:AsyncInvoker not releasing the ThreadAsyncInvoker 不释放线程
【发布时间】:2016-02-28 04:18:16
【问题描述】:

我正在使用 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;
}

【问题讨论】:

  • 任何解决方案技术人员!!!

标签: java multithreading jax-rs jersey-2.0 jersey-client


【解决方案1】:

只要您不对未来值解析后提供给您的实际 javax.ws.rs.core.Response 做任何事情,请求响应流就会保持打开状态(并且与它关联的线程也是原始 HTTP 请求)猜测)。您应该:

  1. javax.ws.rs.core.Response 对象执行操作并关闭它(或它的流)。
  2. 使用.get(MyPojo.class) 将响应流转换为实际对象。这将为您关闭流并在将来解析MyPojo 实例。

【讨论】:

    【解决方案2】:

    您需要关闭您在调用方法中创建的client 对象。在调用方法中,您将有如下内容 -

    Client client = ClientBuilder.newClient();
    
    WebTarget webTarget = client.target(SERVER_URL).path(API_PATH).path(String.valueOf(id));
    
    fire(webTarget);
    

    所以你需要在调用这个方法后关闭你的client -

    client.close()
    

    但是,关闭client 的推荐方式是在收到响应后。像下面这样 -

    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();
        } 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-14
      • 2021-03-27
      • 2016-03-05
      • 2011-09-13
      • 1970-01-01
      • 2018-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多