Spec-Zone.ru › OpenJDK 27

Класс HttpClient

java.lang.Object
java.net.http.HttpClient
Все реализуемые интерфейсы:
AutoCloseable
public abstract class HttpClient extends Object implements AutoCloseable
HTTP-клиент.

HttpClient можно использовать для отправки запросов и получения соответствующих ответов. HttpClient создаётся с помощью builder. Метод newBuilder возвращает построитель, создающий экземпляры реализации HttpClient по умолчанию. Построитель можно использовать для настройки состояния клиента, например: предпочтительной версии протокола (HTTP/1.1, HTTP/2 или HTTP/3), необходимости следовать перенаправлениям, прокси-сервера, средства аутентификации и т. д. После создания HttpClient становится неизменяемым и может использоваться для отправки нескольких запросов.

HttpClient предоставляет сведения о конфигурации и обеспечивает совместное использование ресурсов для всех отправляемых через него запросов. Экземпляр HttpClient обычно управляет собственными пулами соединений, которые он может повторно использовать при необходимости. Пулы соединений, как правило, не являются общими для разных экземпляров HttpClient. Хотя создавать новый клиент для каждой операции возможно, обычно это не позволяет повторно использовать такие соединения.

Для каждого отправляемого HttpRequest необходимо указать BodyHandler. BodyHandler определяет способ обработки тела ответа, если оно есть. После получения HttpResponse доступны заголовки, код ответа и (как правило) тело. Прочитаны ли байты тела ответа или нет, зависит от типа, T, тела ответа.

Запросы можно отправлять синхронно или асинхронно:

  • send(HttpRequest, BodyHandler) блокирует выполнение до отправки запроса и получения ответа.
  • sendAsync(HttpRequest, BodyHandler) отправляет запрос и асинхронно получает ответ. Метод sendAsync немедленно возвращает CompletableFuture<HttpResponse>. Выполнение CompletableFuture завершается, когда ответ становится доступен. Возвращённый CompletableFuture можно комбинировать различными способами, чтобы объявить зависимости между несколькими асинхронными задачами.

Синхронный пример

HttpClient client = HttpClient.newBuilder()
     .version(Version.HTTP_1_1)
     .followRedirects(Redirect.NORMAL)
     .connectTimeout(Duration.ofSeconds(20))
     .proxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 80)))
     .authenticator(Authenticator.getDefault())
     .build();

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://foo.com/"))
    .build();
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());

Асинхронный пример

HttpRequest request = HttpRequest.newBuilder()
     .uri(URI.create("https://foo.com/"))
     .timeout(Duration.ofMinutes(2))
     .header("Content-Type", "application/json")
     .POST(BodyPublishers.ofFile(Paths.get("file.json")))
     .build();
client.sendAsync(request, BodyHandlers.ofString())
     .thenApply(HttpResponse::body)
     .thenAccept(System.out::println);
Примечание к API:
Ресурсы, выделенные HttpClient, могут быть освобождены раньше при закрытии клиента.
Примечание по реализации:

Классы HttpResponse.BodyHandlers и HttpResponse.BodySubscribers предоставляют некоторые реализации BodyHandler и BodySubscriber для потоковой передачи или публикации, позволяющие передавать данные тела потоком вызывающему коду. Чтобы освободить ресурсы, связанные с этими потоками, и считать HTTP-запрос завершённым, вызывающий код должен в конечном итоге получить тело потокового ответа и закрыть, отменить либо полностью прочитать возвращённые потоки. Аналогично, пользовательская реализация HttpResponse.BodySubscriber должна либо запрашивать request все данные до получения сигнала onComplete или onError, либо в конечном итоге отменить подписку.

Встроенная реализация JDK HttpClient переопределяет методы close(), shutdown(), shutdownNow(), awaitTermination(Duration) и isTerminated(), обеспечивая их наилучшую возможную реализацию. Если не закрыть, не отменить или не прочитать streaming or publishing bodies до конца, доставка данных может остановиться, а запрос останется открытым, что может задержать штатное завершение работы. При вызове метода shutdownNow() будет предпринята попытка отменить все такие незавершённые запросы, но это может привести к резкому завершению любой выполняющейся операции.

Если встроенная реализация JDK HttpClient не закрыта явно, она освобождает свои ресурсы, когда экземпляр HttpClient перестаёт быть сильно достижимым и все операции, начатые на этом экземпляре, в конечном итоге завершаются. Это зависит как от того, заметит ли сборщик мусора, что экземпляр больше недостижим, так и от того, завершатся ли в конечном итоге все запросы, начатые клиентом. Если не закрыть должным образом потоковые тела или тела публикации, связанные запросы могут не завершиться, а сборщик мусора не сможет освободить ресурсы, выделенные соответствующим клиентом.

Реализация HttpClient по умолчанию поддерживает HTTP/1.1, HTTP/2 и HTTP/3. Фактически используемая при отправке запроса версия протокола может зависеть от нескольких факторов. В случае HTTP/2 это может зависеть от успешного первоначального обновления (при использовании обычного соединения) или от успешного согласования HTTP/2 во время рукопожатия протокола TLS (Transport Layer Security).

Если для незашифрованного соединения выбрана версия HTTP/2 и соединение HTTP/2 с исходным сервером ещё не установлено, клиент создаст новое соединение и попытается выполнить обновление с HTTP/1.1 до HTTP/2. Если обновление будет успешным, для ответа на этот запрос будет использоваться HTTP/2. Если обновление не удастся, ответ будет обработан с использованием HTTP/1.1.

На выбор версии протокола могут влиять и другие ограничения. Например, если HTTP/2 запрашивается через прокси-сервер и реализация не поддерживает такой режим, может использоваться HTTP/1.1.

По умолчанию протокол HTTP/3 не выбирается, но его можно включить, задав предпочтительную версию HttpClient или предпочтительную версию HttpRequest равной HTTP/3. Как и в случае HTTP/2, фактически используемая версия протокола при включённом HTTP/3 может зависеть от нескольких факторов. Подсказки конфигурации можно указать, чтобы помочь реализации HttpClient определить способ установления и выполнения обмена данными HTTP при включённом протоколе HTTP/3. Если подсказки конфигурации не указаны, HttpClient выберет одну из них, как описано в документации API параметра H3_DISCOVERY.
Обратите внимание: запрос, схема URI которого не является "https", никогда не будет отправлен по HTTP/3. В этой реализации HTTP/3 не используется, если выбран прокси-сервер.

Если конкретный экземпляр HttpClient не поддерживает отправку запросов через HTTP/3, может быть выброшено исключение UnsupportedProtocolVersionException: либо при создании клиента с предпочтительной версией HTTP/3, либо при попытке отправить запрос с включённым HTTP/3, если был указан параметр HTTP_3_URI_ONLY. Обычно это может произойти, если настроенные для экземпляра клиента SSLContext или SSLParameters нельзя использовать с HTTP/3.

Начиная с:
11
См. также:
  • UnsupportedProtocolVersionException
  • HttpClient.Builder.version(Version)
  • HttpRequest.Builder.version(Version)
  • HttpRequest.Builder.setOption(HttpOption, Object)
  • HttpOption.H3_DISCOVERY

Краткое описание вложенных классов

Модификатор и тип Класс Описание
static interface  HttpClient.Builder
Построитель HTTP-клиентов.
static enum  HttpClient.Redirect
Определяет политику автоматического перенаправления.
static enum  HttpClient.Version
Версия протокола HTTP.

Краткое описание конструкторов

HttpClient()
Модификатор Конструктор Описание
protected
Создаёт HttpClient.

Краткое описание методов

Модификатор и тип Метод Описание
abstract Optional<Authenticator> authenticator()
Возвращает Optional, содержащий Authenticator, заданное для этого клиента.
boolean awaitTermination(Duration duration)
Блокирует выполнение до завершения всех операций после запроса на остановку, истечения duration или прерывания текущего потока — в зависимости от того, что произойдёт раньше.
void close()
Инициирует штатное завершение работы: запросы, ранее переданные в send или sendAsync, будут выполнены до конца, но новые запросы приниматься не будут.
abstract Optional<Duration> connectTimeout()
Возвращает Optional, содержащий длительность тайм-аута соединения для этого клиента.
abstract Optional<CookieHandler> cookieHandler()
Возвращает Optional, содержащий CookieHandler этого клиента.
abstract Optional<Executor> executor()
Возвращает Optional, содержащий Executor этого клиента.
abstract HttpClient.Redirect followRedirects()
Возвращает политику перенаправлений для этого клиента.
boolean isTerminated()
Возвращает true, если после завершения работы все операции завершены.
static HttpClient.Builder newBuilder()
Создаёт новый построитель HttpClient.
static HttpClient newHttpClient()
Возвращает новый HttpClient с настройками по умолчанию.
WebSocket.Builder newWebSocketBuilder()
Создаёт новый построитель WebSocket (необязательная операция).
abstract Optional<ProxySelector> proxy()
Возвращает Optional, содержащий ProxySelector, переданный этому клиенту.
abstract <T> HttpResponse<T> send(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler)
Отправляет указанный запрос с помощью этого клиента, при необходимости блокируя выполнение до получения ответа.
abstract <T> CompletableFuture<HttpResponse<T>> sendAsync(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler)
Асинхронно отправляет указанный запрос с помощью этого клиента, используя заданный обработчик тела ответа.
abstract <T> CompletableFuture<HttpResponse<T>> sendAsync(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler, HttpResponse.PushPromiseHandler<T> pushPromiseHandler)
Асинхронно отправляет указанный запрос с помощью этого клиента, используя заданные обработчик тела ответа и обработчик обещаний на отправку.
void shutdown()
Инициирует штатное завершение работы: запросы, ранее переданные с помощью send или sendAsync, будут выполнены до конца, но новые запросы приниматься не будут.
void shutdownNow()
Этот метод пытается инициировать немедленное завершение работы.
abstract SSLContext sslContext()
Возвращает SSLContext этого клиента.
abstract SSLParameters sslParameters()
Возвращает копию SSLParameters этого клиента.
abstract HttpClient.Version version()
Возвращает предпочтительную версию протокола HTTP для этого клиента.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли другой объект этому объекту.
protected void finalize()
Устарело, планируется удаление: этот элемент API может быть удалён в будущей версии.
Финализация объявлена устаревшей и может быть удалена в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает значение хеш-кода для этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо до истечения заданного промежутка реального времени.

Подробное описание конструкторов

HttpClient

protected HttpClient()
Создает HttpClient.

Подробное описание методов

newHttpClient

public static HttpClient newHttpClient()
Возвращает новый HttpClient с настройками по умолчанию.

Эквивалентно newBuilder().build().

Настройки по умолчанию включают: метод запроса «GET», предпочтительную версию HTTP/2, политику перенаправления NEVER, селектор прокси по умолчанию и контекст SSL по умолчанию.

Примечание по реализации:
Системные значения по умолчанию извлекаются в момент создания экземпляра HttpClient. Изменение системных значений после создания экземпляра HttpClient, например путем вызова ProxySelector.setDefault(ProxySelector) или SSLContext.setDefault(SSLContext), не влияет на уже созданные экземпляры.
Возвращает:
новый HttpClient
Исключения:
UncheckedIOException — если невозможно выделить необходимые базовые ресурсы ввода-вывода для создания нового HttpClient.

newBuilder

public static HttpClient.Builder newBuilder()
Создает новый конструктор HttpClient.

Конструкторы, возвращаемые этим методом, создают экземпляры стандартной реализации HttpClient.

Возвращает:
HttpClient.Builder

cookieHandler

public abstract Optional<CookieHandler> cookieHandler()
Возвращает Optional, содержащий CookieHandler этого клиента. Если в конструкторе этого клиента не был задан CookieHandler, то Optional пуст.
Возвращает:
Optional, содержащий CookieHandler этого клиента

connectTimeout

public abstract Optional<Duration> connectTimeout()
Возвращает Optional, содержащий длительность ожидания подключения для этого клиента. Если длительность ожидания подключения не была задана в конструкторе клиента, то Optional пуст.
Возвращает:
Optional, содержащий длительность ожидания подключения для этого клиента

followRedirects

public abstract HttpClient.Redirect followRedirects()
Возвращает политику перенаправления для этого клиента. Значение по умолчанию для клиентов, созданных конструкторами, в которых не указана политика перенаправления, — NEVER.
Возвращает:
настройку перенаправления для этого клиента

proxy

public abstract Optional<ProxySelector> proxy()
Возвращает Optional, содержащий ProxySelector, переданный этому клиенту. Если в конструкторе этого клиента не был задан селектор прокси, то Optional пуст.

Хотя этот метод может вернуть пустой объект Optional, у HttpClient может быть не предоставляемый через API селектор прокси по умолчанию, используемый для отправки HTTP-запросов.

Возвращает:
Optional, содержащий селектор прокси, переданный этому клиенту.

sslContext

public abstract SSLContext sslContext()
Возвращает SSLContext этого клиента.

Если в конструкторе этого клиента не был задан SSLContext, возвращается контекст по умолчанию.

Возвращает:
SSLContext этого клиента

sslParameters

public abstract SSLParameters sslParameters()
Возвращает копию SSLParameters этого клиента.

Если в конструкторе клиента не были заданы SSLParameters, возвращается используемый клиентом набор параметров, заданный реализацией по умолчанию.

Возвращает:
SSLParameters этого клиента

authenticator

public abstract Optional<Authenticator> authenticator()
Возвращает Optional, содержащий Authenticator, заданный для этого клиента. Если в конструкторе клиента не был задан Authenticator, то Optional пуст.
Возвращает:
Optional, содержащий Authenticator этого клиента

version

public abstract HttpClient.Version version()
Возвращает предпочтительную версию протокола HTTP для этого клиента. Значение по умолчанию — HttpClient.Version.HTTP_2
Примечание по реализации:
На версию протокола, которую HttpClient в конечном итоге выбирает для запроса, влияют различные факторы, указанные в разделе Выбор версии протокола.
Возвращает:
запрошенную версию протокола HTTP

executor

public abstract Optional<Executor> executor()
Возвращает Optional, содержащий Executor этого клиента. Если в конструкторе клиента не был задан Executor, то Optional пуст.

Хотя этот метод может вернуть пустой объект Optional, у HttpClient может быть не предоставляемый через API исполнитель по умолчанию, используемый для выполнения асинхронных и зависимых задач.

Возвращает:
Optional, содержащий Executor этого клиента

send

public abstract <T> HttpResponse<T> send(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler) throws IOException, InterruptedException
Отправляет указанный запрос с помощью этого клиента, при необходимости блокируя выполнение до получения ответа. Возвращенный HttpResponse<T> содержит статус ответа, заголовки и тело (обработанное указанным обработчиком тела ответа).

Если выполнение операции прервано, реализация HttpClient по умолчанию пытается отменить обмен HTTP-данными и выбрасывает InterruptedException. Не гарантируется, что запрос на отмену будет учтен в определенный момент. В частности, запрос все еще может быть отправлен на сервер, поскольку его обработка могла уже начаться асинхронно в другом потоке, а базовые ресурсы могут быть освобождены только асинхронно.

  • В HTTP/1.1 попытка отмены может привести к внезапному закрытию базового соединения.
  • В HTTP/2 попытка отмены может привести к сбросу потока или, при определенных обстоятельствах, также к внезапному закрытию соединения, например если поток в данный момент пытается выполнить запись в базовый сокет.
Параметры типа:
T — тип тела ответа
Параметры:
request — запрос
responseBodyHandler — обработчик тела ответа
Возвращает:
ответ
Исключения:
IOException — если при отправке или получении произошла ошибка ввода-вывода либо клиент был закрыт
InterruptedException — если выполнение операции прервано
IllegalArgumentException — если аргумент request не является запросом, который можно было бы корректно создать согласно спецификации HttpRequest.Builder.

sendAsync

public abstract <T> CompletableFuture<HttpResponse<T>> sendAsync(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler)
Асинхронно отправляет указанный запрос с помощью этого клиента и указанного обработчика тела ответа.

Эквивалентно: sendAsync(request, responseBodyHandler, null).

Параметры типа:
T — тип тела ответа
Параметры:
request — запрос
responseBodyHandler — обработчик тела ответа
Возвращает:
CompletableFuture<HttpResponse<T>>
Исключения:
IllegalArgumentException — если аргумент request не является запросом, который можно было бы корректно создать согласно спецификации HttpRequest.Builder.

sendAsync

public abstract <T> CompletableFuture<HttpResponse<T>> sendAsync(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler, HttpResponse.PushPromiseHandler<T> pushPromiseHandler)
Асинхронно отправляет указанный запрос с помощью этого клиента и указанных обработчика тела ответа и обработчика обещаний push.

Возвращенный объект CompletableFuture, если он завершается успешно, завершается объектом HttpResponse<T>, содержащим статус ответа, заголовки и тело (обработанное указанным обработчиком тела ответа).

Полученные обещания push, если таковые имеются, обрабатываются указанным pushPromiseHandler. Значение pushPromiseHandler, равное null, отклоняет все обещания push.

Возвращенный объект CompletableFuture завершается с исключением в следующих случаях:

  • IOException — если при отправке или получении произошла ошибка ввода-вывода либо клиент был закрыт.

Реализация HttpClient по умолчанию возвращает объекты CompletableFuture, которые можно отменить. Объекты CompletableFuture, полученные на основе отменяемых будущих результатов, также можно отменить. Вызов cancel(true) для незавершенного отменяемого будущего результата пытается отменить обмен HTTP-данными, чтобы как можно скорее освободить базовые ресурсы. Не гарантируется, что запрос на отмену будет учтен в определенный момент. В частности, запрос все еще может быть отправлен на сервер, поскольку его обработка могла уже начаться асинхронно в другом потоке, а базовые ресурсы могут быть освобождены только асинхронно.

  • В HTTP/1.1 попытка отмены может привести к внезапному закрытию базового соединения.
  • В HTTP/2 попытка отмены может привести к сбросу потока.
Параметры типа:
T — тип тела ответа
Параметры:
request — запрос
responseBodyHandler — обработчик тела ответа
pushPromiseHandler — обработчик обещаний push; может иметь значение null
Возвращает:
CompletableFuture<HttpResponse<T>>
Исключения:
IllegalArgumentException — если аргумент request не является запросом, который можно было бы корректно создать согласно спецификации HttpRequest.Builder.

newWebSocketBuilder

public WebSocket.Builder newWebSocketBuilder()
Создает новый конструктор WebSocket (необязательная операция).

Пример

HttpClient client = HttpClient.newHttpClient();
CompletableFuture<WebSocket> ws = client.newWebSocketBuilder()
   .buildAsync(URI.create("ws://websocket.example.com"), listener);

Более точный контроль над рукопожатием открытия WebSocket можно получить, используя пользовательский HttpClient.

Пример

InetSocketAddress addr = new InetSocketAddress("proxy.example.com", 80);
HttpClient client = HttpClient.newBuilder()
        .proxy(ProxySelector.of(addr))
        .build();

CompletableFuture<WebSocket> ws = client.newWebSocketBuilder()
        .buildAsync(URI.create("ws://websocket.example.com"), listener);
Требования к реализации:
Реализация этого метода по умолчанию выбрасывает UnsupportedOperationException. Клиенты, полученные с помощью newHttpClient() или newBuilder(), возвращают конструктор WebSocket.
Примечание по реализации:
И конструктор, и созданные с его помощью WebSocket работают неблокирующим образом. То есть их методы не блокируют выполнение перед возвратом CompletableFuture. Асинхронные задачи выполняются в исполнителе этого HttpClient.

Когда завершается CompletionStage, возвращенный из Listener.onClose, WebSocket отправляет сообщение Close с тем же кодом, что и у полученного сообщения, и пустой причиной.

Возвращает:
WebSocket.Builder
Исключения:
UnsupportedOperationException — если этот HttpClient не поддерживает WebSocket

shutdown

public void shutdown()
Инициирует корректное завершение работы: ранее отправленные с помощью send или sendAsync запросы выполняются до конца, но новые запросы не принимаются. Для завершения запроса может потребоваться выполнение нескольких фоновых операций, включая ожидание доставки ответов; все они должны завершиться, прежде чем запрос будет считаться завершенным. Повторный вызов не оказывает дополнительного эффекта, если работа уже завершена.

Этот метод не дожидается завершения ранее отправленных запросов. Для этого используйте awaitTermination или close.

Требования к реализации:
Реализация этого метода по умолчанию ничего не делает. Подклассам следует переопределить этот метод, чтобы реализовать соответствующее поведение.
Начиная с:
21
См. также:
  • Примечание по реализации: закрытие HttpClient

awaitTermination

public boolean awaitTermination(Duration duration) throws InterruptedException
Блокирует выполнение до завершения всех операций после запроса на завершение работы, истечения duration или прерывания текущего потока — в зависимости от того, что произойдет раньше. Операциями считаются любые задачи, необходимые для полного выполнения ранее отправленного с помощью send или sendAsync запроса.

Этот метод не ожидает, если длительность ожидания меньше или равна нулю. В этом случае метод лишь проверяет, завершился ли поток.

Требования к реализации:
Реализация этого метода по умолчанию проверяет аргументы на null, но в остальном ничего не делает и возвращает true. Подклассам следует переопределить этот метод, чтобы реализовать требуемое поведение.
Параметры:
duration — максимальное время ожидания
Возвращает:
true, если работа этого клиента завершена, и false, если время ожидания истекло до завершения работы
Исключения:
InterruptedException — если во время ожидания произошло прерывание
Начиная с:
21
См. также:
  • Примечание по реализации: закрытие HttpClient

isTerminated

public boolean isTerminated()
Возвращает true, если после завершения работы все операции завершены. Операциями считаются любые задачи, необходимые для полного выполнения ранее отправленного с помощью send или sendAsync запроса.

Обратите внимание, что isTerminated никогда не равно true, если предварительно не был вызван shutdown или shutdownNow.

Требования к реализации:
Реализация этого метода по умолчанию ничего не делает и возвращает false. Подклассам следует переопределить этот метод, чтобы реализовать требуемое поведение.
Возвращает:
true, если после завершения работы все задачи выполнены
Начиная с:
21
См. также:
  • Примечание по реализации: закрытие HttpClient

shutdownNow

public void shutdownNow()
Этот метод пытается инициировать немедленное завершение работы. Реализация метода может попытаться прервать выполняющиеся в данный момент операции. Операциями считаются любые задачи, необходимые для полного выполнения ранее отправленного с помощью send или sendAsync запроса. Поведение выполняющихся операций при прерывании не определено. В частности, не гарантируется, что прерванные операции завершатся или что код, ожидающий их выполнения, когда-либо получит уведомление.
Требования к реализации:
Реализация этого метода по умолчанию просто вызывает shutdown(). Подклассам следует переопределить этот метод, чтобы реализовать соответствующее поведение.
Начиная с:
21
См. также:
  • Примечание по реализации: закрытие HttpClient

close

public void close()
Инициирует корректное завершение работы: ранее отправленные в send или sendAsync запросы выполняются до конца, но новые запросы не принимаются. Для завершения запроса может потребоваться выполнение нескольких фоновых операций, включая ожидание доставки ответов. Этот метод ожидает завершения всех операций и прекращения работы клиента.

Если во время ожидания происходит прерывание, этот метод может попытаться остановить все операции, вызвав shutdownNow(). Затем он продолжает ожидание до завершения всех выполняющихся операций. Перед возвратом из метода статус прерывания будет восстановлен.

Если работа уже завершена, вызов этого метода не оказывает никакого эффекта.

Определено в:
close в интерфейсе AutoCloseable
Требования к реализации:
Реализация этого метода по умолчанию вызывает shutdown() и ожидает завершения выполнения задач с помощью awaitTermination.
Начиная с:
21
См. также:
  • Примечание по реализации: закрытие HttpClient

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, концептуальные обзоры, определения терминов, способы решения проблем и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2026, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API