5.1 āđ€āļĄāļ˜āļ­āļ” sendAsync()

āļ„āļļāļ“āļĒāļąāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāđˆāļ‡āļ„āļģāļ‚āļ­āđāļšāļšāļ­āļ°āļ‹āļīāļ‡āđ‚āļ„āļĢāļ™āļąāļŠāđ‚āļ”āļĒāđƒāļŠāđ‰ HttpClient āđ‚āļ”āļĒāļ›āļāļ•āļīāļˆāļ°āļ—āļģāđƒāļ™āļŠāļēāļĄāļāļĢāļ“āļĩ

āļāļĢāļ“āļĩāđāļĢāļāļ„āļ·āļ­āļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āļˆāļ°āđƒāļŠāđ‰āđ€āļ§āļĨāļēāļ™āļēāļ™āļĄāļēāļāđ€āļŠāđˆāļ™ āļāļēāļĢāļŠāđˆāļ‡/āļĢāļąāļšāđ„āļŸāļĨāđŒ āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāļ™āļĩāđ‰āļˆāļ°āđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āđāļĨāļ°āļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāđāļšāļšāļ­āļ°āļ‹āļīāļ‡āđ‚āļ„āļĢāļ™āļąāļŠ

āļāļĢāļ“āļĩāļ—āļĩāđˆāļŠāļ­āļ‡āļ„āļ·āļ­āļ„āļļāļ“āļ•āđ‰āļ­āļ‡āļŠāđˆāļ‡āļ„āļģāļ‚āļ­āļšāđˆāļ­āļĒāļĄāļēāļāđāļĨāļ°āđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāļĢāļ­āļāļēāļĢāļ•āļ­āļšāļāļĨāļąāļšāļˆāļēāļāļ„āļģāļ‚āļ­āļāđˆāļ­āļ™āļŦāļ™āđ‰āļēāļāđˆāļ­āļ™āļ—āļĩāđˆāļˆāļ°āļŠāđˆāļ‡āļ„āļģāļ‚āļ­āļ–āļąāļ”āđ„āļ›

āđāļĨāļ°āļŠāļļāļ”āļ—āđ‰āļēāļĒ āļāļĢāļ“āļĩāļ—āļĩāđˆāļŠāļēāļĄ - āļœāļĨāļĨāļąāļžāļ˜āđŒāļ‚āļ­āļ‡āļ„āļģāļ‚āļ­āļ‚āļ­āļ‡āļ„āļļāļ“āđ„āļĄāđˆāļŠāļģāļ„āļąāļāļŠāļģāļŦāļĢāļąāļš āļ„āļļāļ“ āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđ€āļŠāđˆāļ™ āļ„āļļāļ“āļ–āđˆāļēāļĒāļ āļēāļžāļŦāļ™āđ‰āļēāļˆāļ­āļ‚āļ­āļ‡āļ„āļļāļ“āļ™āļēāļ—āļĩāļĨāļ°āļ„āļĢāļąāđ‰āļ‡āđāļĨāļ°āļŠāđˆāļ‡āđ„āļ›āļĒāļąāļ‡āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒ āļ™āļąāđˆāļ™āļ„āļ·āļ­ āļ•āļĢāļĢāļāļ°āļ‚āļ­āļ‡āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļ‚āļ­āļ‡āļ„āļļāļ“āļˆāļ°āļ–āļ·āļ­āļ§āđˆāļēāļĄāļĩāļ„āļģāļ‚āļ­āļˆāļģāļ™āļ§āļ™āļĄāļēāļāđāļĨāļ°āđ€āļ‚āđ‰āļēāļ–āļķāļ‡āđ„āļĄāđˆāđ„āļ”āđ‰āļ—āļąāđ‰āļ‡āļŦāļĄāļ” āļˆāļēāļāļ™āļąāđ‰āļ™āļˆāļ°āļŠāļ°āļ”āļ§āļāđƒāļ™āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ•āļēāļĄāļŦāļĨāļąāļāļāļēāļĢ - āļŠāđˆāļ‡āđāļĨāļ°āļĨāļ·āļĄ

āđƒāļ™āļāļēāļĢāļŠāđˆāļ‡āļ„āļģāļ‚āļ­āđāļšāļšāļ­āļ°āļ‹āļīāļ‡āđ‚āļ„āļĢāļ™āļąāļŠ āļ„āļļāļ“āļ•āđ‰āļ­āļ‡āđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āđ€āļĄāļ˜āļ­āļ”sendAsync()āļšāļ™āļ§āļąāļ•āļ–āļļāļ‚āļ­āļ‡āļ„āļĨāļēāļŠ HttpClient āđ€āļĄāļ˜āļ­āļ”āļ™āļĩāđ‰āļ­āļ­āļāļ—āļąāļ™āļ—āļĩāđāļĨāļ°āļŠāđˆāļ‡āļ„āļ·āļ™āđ„āļŸāļĨāđŒ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()