title: JerseyClient async calls seems to leave hanging threads
body: <p>I'm using jersey-client-3.0-SNAPSHOT.</p>
  
  <p>I do something like:</p>
  
  <pre><code> final Client client = createClient();
  </code></pre>
  
  <p>...</p>
  
  <pre><code>    Builder builder = target.request();
      for (final Entry&lt;String, String&gt; entry : getHeaders().entrySet()) {
          builder = builder.header(entry.getKey(), entry.getValue());
      }
      final Builder finalBuilder = builder;
      executor.submit(() -&gt; {
          final Entity&lt;?&gt; entity = createPostEntity();
          futureResponse = finalBuilder.async().post(entity);
          try {
              response = futureResponse.get(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
              consumeResponse(response);
          } catch (ExecutionException | TimeoutException | InterruptedException | IOException e) {
              errorConsumer.accept(e);
          }
      });
  
      if (futureResponse != null) {
          try {
              futureResponse.cancel(true);
          } catch (final Exception e) {
              //does nothing, now we try keep closing resources
          }
      }
      if (response != null) {
          try {
              response.close();
          } catch (final Exception e) {
              //does nothing, now we try keep closing resources
          }
      }
  </code></pre>
  
  <p>... //wait for responses and read or whatever</p>
  
  <pre><code>client.close();
  </code></pre>
  
  <p>And a new thread keeps appearing each time a create and destroy one of those clients.</p>
  
  <p>Is there a safe way on destroying those threads?
  Is this an expected behaviour?
  Am a doing anything wrong?</p>