5.1 sendAsync() рдкрджреНрдзрдд

рддреБрдореНрд╣реА HttpClient рд╡рд╛рдкрд░реВрди рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡рд┐рдирдВрддреНрдпрд╛ рджреЗрдЦреАрд▓ рдкрд╛рдард╡реВ рд╢рдХрддрд╛. рд╣реЗ рд╕рд╣рд╕рд╛ рддреАрди рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ.

рдкрд╣рд┐рд▓реА рдХреЗрд╕ рдЕрд╢реА рдЖрд╣реЗ рдХреА рд╡рд┐рдирдВрддреАрд▓рд╛ рдЦреВрдк рд╡реЗрд│ рд▓рд╛рдЧреЗрд▓ , рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдлрд╛рдЗрд▓ рдкрд╛рдард╡рдгреЗ / рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреЗ. рд╣реЗ рдСрдкрд░реЗрд╢рди рдирдВрддрд░ рд╕реБрд░реВ рдХреЗрд▓реЗ рдЬрд╛рддреЗ рдЖрдгрд┐ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕рдкрдгреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ.

рджреБрд╕рд░реА рдХреЗрд╕ рдЕрд╢реА рдЖрд╣реЗ рдХреА рддреБрдореНрд╣рд╛рд▓рд╛ рд╡рд╛рд░рдВрд╡рд╛рд░ рд╡рд┐рдирдВрддреНрдпрд╛ рдкрд╛рдард╡рд╛рд╡реНрдпрд╛ рд▓рд╛рдЧрддреАрд▓ рдЖрдгрд┐ рдкреБрдврдЪреА рд╡рд┐рдирдВрддреА рдкрд╛рдард╡рдгреНрдпрд╛рдкреВрд░реНрд╡реА рддреБрдореНрд╣реА рдорд╛рдЧреАрд▓ рд╡рд┐рдирдВрддреАрдЪреНрдпрд╛ рдкреНрд░рддрд┐рд╕рд╛рджрд╛рдЪреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реВ рдЗрдЪреНрдЫрд┐рдд рдирд╛рд╣реА.

рдЖрдгрд┐ рд╢реЗрд╡рдЯреА, рддрд┐рд╕рд░рд╛ рдХреЗрд╕ - рддреБрдордЪреНрдпрд╛ рд╡рд┐рдирдВрддреАрдЪрд╛ рдкрд░рд┐рдгрд╛рдо рддреБрдордЪреНрдпрд╛рд╕рд╛рдареА рдорд╣рддреНрддреНрд╡рд╛рдЪрд╛ рдирд╛рд╣реА . рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рддреБрдореНрд╣реА рдорд┐рдирд┐рдЯрд╛рддреВрди рдПрдХрджрд╛ рддреБрдордЪреНрдпрд╛ рд╕реНрдХреНрд░реАрдирдЪрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдШреНрдпрд╛ рдЖрдгрд┐ рддреЛ рд╕рд░реНрд╡реНрд╣рд░рд▓рд╛ рдкрд╛рдард╡рддрд╛. рдореНрд╣рдгрдЬреЗрдЪ, рддреБрдордЪреНрдпрд╛ рдЕрд░реНрдЬрд╛рдЪрд╛ рддрд░реНрдХ рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░рддреЛ рдХреА рдЕрдиреЗрдХ рд╡рд┐рдирдВрддреНрдпрд╛ рдЖрд╣реЗрдд рдЖрдгрд┐ рддреНрдпрд╛ рд╕рд░реНрд╡ рдкреЛрд╣реЛрдЪрдд рдирд╛рд╣реАрдд. рдордЧ рддрддреНрддреНрд╡рд╛рдиреБрд╕рд╛рд░ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рд╕реЛрдпреАрдЪреЗ рдЖрд╣реЗ - рдкрд╛рдард╡рд╛ рдЖрдгрд┐ рд╡рд┐рд╕рд░рд╛.

рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡рд┐рдирдВрддреА рдкрд╛рдард╡рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ sendAsync()HttpClient рдХреНрд▓рд╛рд╕рдЪреНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯрд╡рд░ рдкрджреНрдзрдд рдХреЙрд▓ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╣реА рдкрджреНрдзрдд рддреНрд╡рд░рд┐рдд рдмрд╛рд╣реЗрд░ рдкрдбрддреЗ рдЖрдгрд┐ a рдкрд░рдд рдХрд░рддреЗ CompletableFuture<HttpResponse>. рддреНрдпрд╛рджреНрд╡рд╛рд░реЗ, рд╡рд┐рдирдВрддреА рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдХреЗрд╡реНрд╣рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реА рдЬрд╛рддреЗ рдпрд╛рдЪрд╛ рдорд╛рдЧреЛрд╡рд╛ рдШреЗрдК рд╢рдХрддрд╛, рддрд╕реЗрдЪ рд╡рд┐рдирдВрддреА рдкреВрд░реНрдг рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реВ рд╢рдХрддрд╛. рдЙрджрд╛рд╣рд░рдг:

HttpClient client = HttpClient.newBuilder().build();

CompletableFuture<HttpResponse<String>> response = client.sendAsync(
        request,
        HttpResponse.BodyHandlers.ofString()
);

рдкрджреНрдзрдд sendAsync()рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░рдд рдХрд░рддреЗ CompletableFutureрдЬреНрдпрд╛рдордзреНрдпреЗ HttpResponse рдЕрд╕рддреЛ, рдЬреНрдпрд╛рдордзреНрдпреЗ рд╕рд░реНрд╡реНрд╣рд░ рдкрд░рдд рдХрд░реЗрд▓ рдЕрд╢реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЕрд╕рддреЗ.

5.2 executor() рдкрджреНрдзрдд, ExecutorService

рддрд╕реЗрдЪ, HttpClient рддреБрдореНрд╣рд╛рд▓рд╛ рддреНрдпрд╛рд╡рд░ ExecutorService(рдереНрд░реЗрдбреНрд╕рдЪрд╛ рдПрдХ рдкреВрд▓) рдкрд╛рд╕ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЛ рдЬреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡рд┐рдирдВрддреНрдпрд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓. рд╡рд╛рд╕реНрддрд╡рд┐рдХ, рд╕рд░реНрд╡реНрд╣рд░-рд╕рд╛рдЗрдб Java рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдВрдордзреНрдпреЗ, рд╣реЗ рдиреЗрд╣рдореА рдХреЗрд▓реЗ рдЬрд╛рддреЗ.

рд╢реЗрд╡рдЯреА, рдЬрд░ рддреБрдордЪреНрдпрд╛ API рдХрдбреЗ рдпреЗрдгрд╛рд▒реНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдирдВрддреАрд╕рд╛рдареА, рддреБрдореНрд╣реА рдЗрддрд░рддреНрд░ рдЕрдиреЗрдХ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡рд┐рдирдВрддреНрдпрд╛ рд╕реБрд░реВ рдХрд░рд╛рд▓, рддрд░ рддреБрдордЪреНрдпрд╛рдХрдбреЗ рдкреБрд░реЗрд╕реЗ рдереНрд░реЗрдб рдирд╕рддреАрд▓. рдЙрджрд╛рд╣рд░рдг:

ExecutorService executorService = Executors.newFixedThreadPool(2);

CompletableFuture<HttpResponse<String>> response1 = HttpClient.newBuilder()
  .executor(executorService)
  .build()
  .sendAsync(request, HttpResponse.BodyHandlers.ofString());

CompletableFuture<HttpResponse<String>> response2 = HttpClient.newBuilder()
  .executor(executorService)
  .build()
  .sendAsync(request, HttpResponse.BodyHandlers.ofString());

рдЬрд░ рдереНрд░реЗрдб рдкреВрд▓ рд╕реЗрдЯ рдХреЗрд▓рд╛ рдирд╕реЗрд▓, рддрд░ рдбреАрдлреЙрд▓реНрдЯ рдЖрд╣реЗ .java.util.concurrent.Executors.newCachedThreadPool()