Adr*_*ith 3 java java-http-client java-11
在下面的示例中,我创建了一个 Java 11 httpClient,然后创建了多个并发 HttpRequest。
代码
private static void httpClientExample(){
HttpClient httpClient = HttpClient.newHttpClient();
System.out.println("TP1");
var task1 = httpClient.sendAsync(HttpRequest.newBuilder()
.uri(URI.create("https://www.bing.com/"))
.build(), HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::uri).thenAccept(System.out::println);
var task2 = httpClient.sendAsync(HttpRequest.newBuilder()
.uri(URI.create("https://openjdk.java.net/"))
.build(), HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::uri).thenAccept(System.out::println);
var task3 = httpClient.sendAsync(HttpRequest.newBuilder()
.uri(URI.create("https://www.google.co.uk/"))
.build(), HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::uri).thenAccept(System.out::println);
System.out.println("Requests Sent");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Main Thread Completed");
}
Run Code Online (Sandbox Code Playgroud)
这在API 文档中HttpClient没有明确记录。但预计 HttpClient 旨在处理多个请求。从某种意义上说,Java HTTP 客户端简介中暗示了这一点:
构建完成后,可以使用 HttpClient 发送多个请求。
现在,您的问题可能与管理客户端的并发性有关。HttpClient这与它使用的 executor 服务有很大关系,而不是使用相同的 实例,这是您可以自定义的(请参阅此处):
ExecutorService executorService = Executors.newFixedThreadPool(10);
HttpClient httpClient = HttpClient.newBuilder()
.executor(executorService)
... //more config
.build();
Run Code Online (Sandbox Code Playgroud)
这样,您就可以管理客户端用于运行异步请求的线程池。
换句话说:
这是不好的做法吗?
不
每个 HttpRequest 都应该有自己的 HttpClient 吗?
不
HttpClient 可以拥有的 HttpRequest 数量是否有上限?
您必须测试应用程序的最佳并发设置,然后使用相应配置的执行程序服务。
| 归档时间: |
|
| 查看次数: |
917 次 |
| 最近记录: |