定义 java.net.http.HttpClient 实例属性是一个好习惯吗?

car*_*stu 5 java java-http-client

我正在使用 JDK HttpClient发出一些异步 HTTP 请求。特别是我有一类类似于以下的类:

public class MyClass {
  private HttpClient client;

  public MyClass(){
    client = HttpClient.newBuilder()
    .version(Version.HTTP_1_1)
    .connectTimeout(Duration.ofSeconds(20))
    .build();
  }
  
  public void send(String url){
    HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create(url))
    .header("Content-Type", "application/json")
    .POST(BodyPublishers.ofFile(Paths.get("file.json")))
    .build();
    client.sendAsync(request, BodyHandlers.ofString())
    .thenApply(HttpResponse::body)
    .thenAccept(System.out::println); 
  }
}
Run Code Online (Sandbox Code Playgroud)

这样,当调用发送方法时,我将重用客户端属性。根据文档,这是有效的,因为:“一旦构建,HttpClient 就是不可变的,并且可以用于发送多个请求”

除此之外,我还有一个内存缓存,用于保存MyClass的实例。我想知道这是否是一个好的做法。我特别想知道在内存中保留对 HttpClient 客户端属性的引用是否可能会导致任何类型的内存泄漏或问题(如此处提到的问题

例如,这可能是释放/结束用于执行异步请求的线程执行器的问题吗?