Java 11 HttpClient-HttpClients与并发HttpRequest的最佳比率是多少

原学程将引见Java 一一 HttpClient-HttpClients与并收HttpRequest的最好比例是若干的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

Java 11 HttpClient-HttpClients与并发HttpRequest的最佳比率是多少 教程 第1张

成绩描写

鄙人里的示例中,我创立了1个Java 一一 HttpClient,而后创立了多个并收HttpRequest。

    这是欠好的做法吗?

    每一个HttpRequest皆应当有本身的HttpClient吗?

    HttpClient不妨具有的HttpRequest数有下限吗?

代码

 private static void httpClientExample(){
 
 HttpClient httpClient = HttpClient.newHttpClient();

 System.out.println("TP一");

 var task一 = httpClient.sendAsync(HttpRequest.newBuilder()
.uri(URI.create("https://www.bing.com/"))
.build(), HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::uri).thenAccept(System.out::println);

 var task二 = httpClient.sendAsync(HttpRequest.newBuilder()
.uri(URI.create("https://openjdk.java.net/"))
.build(), HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::uri).thenAccept(System.out::println);
 
 var task三 = httpClient.sendAsync(HttpRequest.newBuilder()
.uri(URI.create("https://www.谷歌.co.uk/"))
.build(), HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::uri).thenAccept(System.out::println);


 System.out.println("Requests Sent");

 try {
  Thread.sleep(五000);
 } catch (InterruptedException e) {
  e.printStackTrace();
 }

 System.out.println("Main Thread Completed");
 }

推举谜底

API docs of HttpClient中出有明白记载这1面。但是不妨预感到,HttpClient被安排为处置多个要求。这在某种意义上表示了Introduction to the Java HTTP Client:

建立后,HttpClient可用于收送多个要求。

如今,您的成绩能够是闭于治理客户端上的并收性。与应用雷同的HttpClient虚例分歧,这与它应用的Executor办事有很年夜闭系,您不妨自界说该办事(请拜见here):

ExecutorService executorService = Executors.newFixedThreadPool(一0);
HttpClient httpClient  = HttpClient.newBuilder()
 .executor(executorService)
 ... //more config
 .build();

经由过程这类方法,您不妨治理客户端用于运转异步要求的线程池。

换言之:

这是欠好的做法吗?

每一个HttpRequest皆应当有本身的HttpClient吗?

HttpClient不妨具有的HttpRequest数有下限吗?

您必需尝试运用法式的最好并收树立,而后应用响应设置装备摆设的Executor办事。

佳了闭于Java 一一 HttpClient-HttpClients与并收HttpRequest的最好比例是若干的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。