5.1 metode sendAsync().

Sampeyan uga bisa ngirim panjalukan sing ora sinkron nggunakake HttpClient. Biasane iki rampung ing telung kasus.

Kasus pisanan yaiku panyuwunan bakal suwe banget , contone, ngirim / nampa file. Operasi iki banjur diwiwiti lan dieksekusi kanthi ora sinkron.

Kasus kapindho yaiku sampeyan kudu ngirim panjaluk kanthi asring lan sampeyan ora pengin ngenteni tanggapan saka panjaluk sadurunge sadurunge ngirim panjaluk sabanjure.

Lan pungkasane, kasus katelu - asil panjaluk sampeyan ora penting kanggo sampeyan . Contone, sampeyan njupuk gambar layar sapisan saben menit lan ngirim menyang server. Yaiku, logika aplikasi sampeyan nganggep manawa ana akeh panjaluk lan ora kabeh tekan. Banjur trep kanggo nggarap prinsip - ngirim lan lali.

Kanggo ngirim panjalukan sing ora sinkron, sampeyan kudu nelpon cara sendAsync()ing obyek saka kelas HttpClient. Cara iki langsung metu lan ngasilake a CompletableFuture<HttpResponse>. Kanthi, sampeyan bisa nglacak nalika panjalukan kasebut bener dieksekusi, uga nglakokake kode tartamtu sawise panjalukan rampung. Tuladha:

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

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

Cara kasebut sendAsync()ngasilake obyek CompletableFuturesing ngemot HttpResponse ing njero, sing ngemot senar sing bakal dibalekake dening server.

5.2 Metode executor(), ExecutorService

Uga, HttpClient ngidini sampeyan ngliwati ExecutorService(kumpulan benang) sing bakal digunakake kanggo nindakake panjaluk sing ora sinkron. Bener, ing aplikasi Java sisih server, iki mesthi ditindakake.

Sawise kabeh, yen saben panyuwunan mlebu menyang API sampeyan, sampeyan bakal mbukak sawetara panjaluk asinkron ing papan liya, sampeyan ora bakal duwe benang sing cukup. Tuladha:

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());

Yen blumbang thread ora disetel, banjur gawan .java.util.concurrent.Executors.newCachedThreadPool()