Метод executor
Метод executor класса HttpClient.Builder задает
исполнителя (Executor), который будет использоваться
для выполнения асинхронных HTTP-запросов. В параметр метода
мы передаем объект Executor. Если исполнитель не задан,
клиент создает собственный исполнитель по умолчанию.
Метод возвращает тот же самый объект HttpClient.Builder,
что позволяет строить цепочку вызовов.
Синтаксис
builder.executor(executor)
Пример
Давайте создадим HTTP-клиент с собственным исполнителем на основе пула из одного потока и выполним запрос:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main
{
public static void main(String[] args) throws Exception
{
ExecutorService executor = Executors.newSingleThreadExecutor();
HttpClient client = HttpClient.newBuilder()
.executor(executor)
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.GET()
.build();
HttpResponse<String> res = client.send(
request,
HttpResponse.BodyHandlers.ofString()
);
System.out.println(res.statusCode());
executor.shutdown();
}
}
Результат выполнения кода:
200
Пример
Давайте выполним асинхронный запрос с исполнителем из четырех потоков и выведем код ответа:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main
{
public static void main(String[] args) throws Exception
{
ExecutorService executor = Executors.newFixedThreadPool(4);
HttpClient client = HttpClient.newBuilder()
.executor(executor)
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.GET()
.build();
CompletableFuture<HttpResponse<String>> future = client.sendAsync(
request,
HttpResponse.BodyHandlers.ofString()
);
HttpResponse<String> res = future.get();
System.out.println(res.statusCode());
executor.shutdown();
}
}
Результат выполнения кода:
200
Смотрите также
-
класс
HttpClient.Builder,
который создает и настраивает HTTP-клиент -
метод
build,
который создает объект HttpClient -
метод
sendAsync,
который отправляет запрос асинхронно -
метод
send,
который отправляет запрос синхронно