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 客户端属性的引用是否可能会导致任何类型的内存泄漏或问题(如此处提到的问题)。
例如,这可能是释放/结束用于执行异步请求的线程执行器的问题吗?